2010-07-08 22:03:41 +04:00
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
< html xmlns = "http://www.w3.org/1999/xhtml" lang = "en-US" xml:lang = "en-US" >
< head >
<!--
*
2010-08-11 21:56:45 +04:00
* Copyright 2008-2010, Haiku. All rights reserved.
2010-07-08 22:03:41 +04:00
* Distributed under the terms of the MIT License.
*
* Authors:
2010-08-11 21:56:45 +04:00
* Niels Reedijk, Matt Madia and Ingo Weinhold who wrote
* http://dev.haiku-os.org/wiki/ and http://dev.haiku-os.org/wiki/ReportingBugs
2010-07-08 22:03:41 +04:00
* Humdinger < humdingerb @ gmail . com >
2010-08-02 20:51:09 +04:00
* Translators:
* Pengphei Han
2010-09-17 17:28:39 +04:00
* dgy18787
2010-07-08 22:03:41 +04:00
*
-->
< meta http-equiv = "content-type" content = "text/html; charset=utf-8" / >
< meta name = "robots" content = "all" / >
2010-08-02 20:51:09 +04:00
< title > 报告错误< / title >
2010-07-08 22:03:41 +04:00
< link rel = "stylesheet" type = "text/css" href = "../Haiku-doc.css" / >
< / head >
< body >
< div id = "banner" >
2010-10-28 12:57:17 +04:00
< div > < span > 用户指南< / span > < / div >
2010-07-08 22:03:41 +04:00
< / div >
< div class = "nav" >
< div class = "inner" >
< ul class = "lang-menu" >
< li class = "now" > < img src = "../images/flags/zh_CN.png" alt = "" / > 中文 [中文]< / li >
< li > < a href = "../fr/bugreports.html" > < img src = "../images/flags/fr.png" alt = "" / > Français< / a > < / li >
< li > < a href = "../de/bugreports.html" > < img src = "../images/flags/de.png" alt = "" / > Deutsch< / a > < / li >
< li > < a href = "../it/bugreports.html" > < img src = "../images/flags/it.png" alt = "" / > Italiano< / a > < / li >
< li > < a href = "../ru/bugreports.html" > < img src = "../images/flags/ru.png" alt = "" / > Русский< / a > < / li >
< li > < a href = "../es/bugreports.html" > < img src = "../images/flags/es.png" alt = "" / > Español< / a > < / li >
2011-05-22 22:01:43 +04:00
< li > < a href = "../sv_SE/bugreports.html" > < img src = "../images/flags/sv_SE.png" alt = "" / > Svenska< / a > < / li >
2010-07-08 22:03:41 +04:00
< li > < a href = "../jp/bugreports.html" > < img src = "../images/flags/jp.png" alt = "" / > 日本語< / a > < / li >
< li > < a href = "../uk/bugreports.html" > < img src = "../images/flags/uk.png" alt = "" / > Українська< / a > < / li >
< li > < a href = "../pt_PT/bugreports.html" > < img src = "../images/flags/pt_PT.png" alt = "" / > Português< / a > < / li >
2011-12-04 00:12:53 +04:00
< li > < a href = "../fi/bugreports.html" > < img src = "../images/flags/fi.png" alt = "" / > Suomi< / a > < / li >
< li > < a href = "../sk/bugreports.html" > < img src = "../images/flags/sk.png" alt = "" / > Slovenčina< / a > < / li >
2010-07-08 22:03:41 +04:00
< li > < a href = "../en/bugreports.html" > < img src = "../images/flags/gb.png" alt = "" / > English< / a > < / li >
< / ul >
< span >
< a href = "../welcome_zh_CN.html" class = "uplink" > Welcome< / a >
< / span > < / div >
< / div >
< div id = "content" >
< div >
2010-08-11 21:56:45 +04:00
< table class = "index" id = "index" summary = "index" >
< tr class = "heading" > < td > 报告错误< / td > < / tr >
2010-09-17 17:28:39 +04:00
< tr class = "index" > < td > < a href = "#account" > 获取Trac账户< / a > < br / >
< a href = "#report" > 创建错误报告< / a > < br / >
< a href = "#app" > 软件错误< / a > < br / >
< a href = "#server" > 服务错误< / a > < br / >
< a href = "#kernel" > 内核错误< / a > < br / >
< a href = "#kdl" > 内核调试- KDL< / a > < br / >
< a href = "#syslog" > 系统日志< / a > < br / >
< a href = "#onscreen" > 屏幕调试< / a > < br / >
< a href = "#hardware" > 硬件错误< / a > < br / >
< a href = "#next" > 下一步?< / a > < / td > < / tr >
2010-08-11 21:56:45 +04:00
< / table >
2010-07-08 22:03:41 +04:00
2010-08-02 20:51:09 +04:00
< h1 > 报告错误< / h1 >
2010-07-08 22:03:41 +04:00
2010-09-17 17:28:39 +04:00
< p > 由于我们的开发人员不可能测试每种硬件组合和每种不同的系统交互方式, 所以我们依赖于用户, 通过用户来给予我们Haiku的运行情况。由于Haiku还很年轻, 您在使用时很有可能会遇到错误。我们非常感谢您能够分出时间来提交这些错误报告。我们可以共同一步一步的提高Haiku的性能。< / p >
2010-08-02 20:51:09 +04:00
< p > 为了确保我们的错误跟踪系统的有效性,遵守共同的< a href = "http://dev.haiku-os.org/wiki/BugTrackerEtiquette" > 错误报告规范< / a > 是很有必要的。< / p >
2010-07-08 22:03:41 +04:00
2010-08-11 21:56:45 +04:00
< h2 > < a href = "#" > < img src = "../images/up.png" style = "border:none;float:right" alt = "index" / > < / a >
2010-09-17 17:28:39 +04:00
< a id = "account" name = "accout" > 获取Trac账户< / a > < / h2 >
2010-08-02 20:51:09 +04:00
< p > 为了提交任务单,您需要在< a href = "http://dev.haiku-os.org/register" title = "Register at Haiku's Bugtracker" > Haiku的错误跟踪系统< / a > 中注册一个账户。
< br / >
2010-09-17 17:28:39 +04:00
新建账户时,您需要< b > 提供自己的电子邮箱< / b > ,否则您将不具备基本的任务单修改权限。完成之后,您必须要保证< b > 检查您的垃圾邮箱< / b > ,因为所有重要的验证邮件可能都会被发送到那里。< / p >
2010-07-08 22:03:41 +04:00
2010-08-11 21:56:45 +04:00
< h2 > < a href = "#" > < img src = "../images/up.png" style = "border:none;float:right" alt = "index" / > < / a >
2010-09-17 17:28:39 +04:00
< a id = "report" name = "report" > 创建错误报告< / a > < / h2 >
2010-08-02 20:51:09 +04:00
< p > 在报告一个错误之前,请您< a href = "http://dev.haiku-os.org/query?status=new&status=assigned&status=reopened&status=closed&summary=%7Etext+you+want+to+search+for&order=priority" > 确保< / a > 该错误报告之前不存在。你可以使用< a href = "http://dev.haiku-os.org/search?q=&noquickjump=1&ticket=on" > 查找< / a > 功能来查找其是否存在。
< br / >
在确定它是一个独特的错误之后,您需要尽可能的找出有关的详细信息:< / p >
2010-07-08 22:03:41 +04:00
< ul >
2010-09-17 17:28:39 +04:00
< li > < p > 尝试在当前版本的Haiku系统中重现您的问题。 有许多用于测试的预编译镜像都是< a href = "http://haiku-files.org/" > 可用的< / a > 。< / p > < / li >
2010-08-02 20:51:09 +04:00
< li > < p > 包括基本的信息, 例如以何种方式测试Haiku( 利用真实的硬件, VMware, 还是QEMU) 。< / p > < / li >
2010-09-17 17:28:39 +04:00
< li > < p > 给出您所运行系统的 < acronym title = "Subversion, the source code management system we use" > SVN< / acronym > 发布版本。您可以在桌面栏菜单中的 '< i > About Haiku...< / i > ' 中找出相关信息。同时您还需要给出您所测试的Haiku的构建类型( gcc2, gcc4, gcc2hybird, gcc4hybird) 。可下载的镜像都会给出相应的命名, 这样您就应该知道如何自行编译。< / p > < / li >
< li > < p > 描述您所遇到的问题。尽量把问题讲得精确和明白:详细的描述系统的行为反馈,和您期望的反馈。< / p > < / li >
< li > < p > 描述出现该错误所需要的操作步骤。这将会有助于开发者重现该错误,并对其进行修复和完善。< / p > < / li >
< li > < p > 附带你所掌握的尽可能多的信息。如果是一个GUI错误, 或者其中的程序错误, 尽量使用 < span class = "key" > PRINT< / span > 键来截取当时的屏幕图像。< / p > < / li >
2010-07-08 22:03:41 +04:00
< / ul >
2010-08-11 21:56:45 +04:00
< h2 > < a href = "#" > < img src = "../images/up.png" style = "border:none;float:right" alt = "index" / > < / a >
2010-09-17 17:28:39 +04:00
< a id = "app" name = "app" > 程序错误< / a > < / h2 >
< p > 如果程序发生崩溃, 您需要从弹出的警告窗口中启动调试程序。它将会打开一个运行gdb( GNUdebugger) 的终端窗口。输入< span class = "cli" > bt< / span > ,您将会创建一个有关调试信息的“回溯”,然后您需要把它完整的复制出来(包括您输入< span class = "cli" > bt< / span > 命令之前终端中显示的内容),附加到错误报告中。< / p >
2010-07-08 22:03:41 +04:00
2010-08-11 21:56:45 +04:00
< h2 > < a href = "#" > < img src = "../images/up.png" style = "border:none;float:right" alt = "index" / > < / a >
2010-09-17 17:28:39 +04:00
< a id = "server" name = "server" > 服务错误< / a > < / h2 >
< p > 当app server, registrar server或者input server等重要组件崩溃时, 您将无法看到通常的崩溃警告。相反的, 整个屏幕将会呈现白色, 并且启动一个gdb会话, 相关的输出信息直接在屏幕中进行显示。您可能还可以继续移动鼠标, 这将会覆盖掉屏幕中的白色区域和gdb输出信息。仍在运行的程序 (例如,进程控制器或者桌面栏的时钟) 可能也会覆盖屏幕中的调试信息。
< br / >
除却所有显示的丑陋和操作的不便,它与软件出错基本一样。 最重要的是获取一个有关错误的回溯(使用 < span class = "cli" > bt< / span > 命令)。如果不能够拷贝相关的文本,您可能还需要使用数码相机记录下相关的屏幕显示。< / p >
2010-07-08 22:03:41 +04:00
2010-08-11 21:56:45 +04:00
< h2 > < a href = "#" > < img src = "../images/up.png" style = "border:none;float:right" alt = "index" / > < / a >
2010-09-17 17:28:39 +04:00
< a id = "kernel" name = "kernel" > 内核错误< / a > < / h2 >
< p > 内核错误通常都是危害效果最大的错误,同时也是最难调试的错误。下面几种情形,通常都可能是内核或者驱动问题:< / p >
2010-07-08 22:03:41 +04:00
< ul >
2010-09-17 17:28:39 +04:00
< li > < p > 系统自动进入了内核调试状态( KDL) , 屏幕上方显示为白色, 并且打印出几行文本。文本第二行显示为“< i > Welcome to Kernel Debugging Land...< / i > ”,而第一行则声明了进入内核调试状态的实时原因。< / p > < / li >
< li > < p > 系统自动重新启动。< / p > < / li >
< li > < p > 系统完全冻结。您无法移动鼠标,并且屏幕中无任何程序显示。在此情况下,重要的是测试能否使用快捷键 < span class = "key" > ALT< / span > < span class = "key" > SysReq< / span > < span class = "key" > D< / span > 进入内核调试状态(在多数键盘上,< span class = "key" > SysReq< / span > 是 < span class = "key" > PRINT< / span > 键)。然后等待至少一分钟,查看系统反应状态。< / p > < / li >
< li > < p > 系统无法实现正确引导。它可能自动重启,或停止在某个步骤(例如,某个启动图标)。对于后一种情况,可以尝试使用快捷键 < span class = "key" > ALT< / span > < span class = "key" > SysReq< / span > < span class = "key" > D< / span > 。< / p > < / li >
< li > < p > 整个系统或者部分硬件无法正确运行。例如, 系统运行缓慢, 出现错误, 或者完全无法运行。如果某个硬件完全无法工作, 首要的是检查Haiku目前是否支持该硬件( 例如, 在邮件列表或论坛中进行询问) 。< / p > < / li >
2010-07-08 22:03:41 +04:00
< / ul >
2010-09-17 17:28:39 +04:00
< p > 需要注意的是,只有最后这种情况与硬件相关,而所有其他的问题也可能由硬件驱动中的错误引起。如果您对引起该问题的硬件或相关的驱动有所疑问,您可以检查删除/禁用该硬件或驱动是否会产生影响。例如, 如果您怀疑无线网络有问题, 您会发现BIOS中有可禁用它的选项。如果其中没有该选项, 您可以从安装的Haiku中删除相关的无线网络驱动( 位于 < span class = "path" > /boot/system/add-ons/kernel/drivers/bin< / span > )。< / p >
2010-08-11 21:56:45 +04:00
< h3 > < a href = "#" > < img src = "../images/up.png" style = "border:none;float:right" alt = "index" / > < / a >
2010-09-17 17:28:39 +04:00
< a id = "kdl" name = "kdl" > 内核调试 - KDL< / a > < / h3 >
< p > 如果系统没有自动的进入内核调试状态,您也可以有意识的使用 < span class = "key" > ALT< / span > < span class = "key" > SysReq< / span > < span class = "key" > D< / span > 快捷键手动进入。< br / >
需要注意的是, 在内核调试状态, 您的键盘可能会无法工作。PS/2键盘通常都能够正常工作; 对于UHCI控制器连接的USB键盘, 您至少需要使用快捷键进入内核调试状态一次, 它才可用。但是对于USB OCHI, 目前还未实现支持。< / p >
< p > KDL本身是shell中的一类。它可以执行命令, 打印系统信息。下面是一些感兴趣的命令: < / p >
2010-08-11 21:56:45 +04:00
< table summary = "layout" border = "0" cellpadding = "2" cellspacing = "0" >
2010-09-17 17:28:39 +04:00
< tr > < td > < span class = "cli" > bt< / span > (aka sc)< / td > < td > < / td > < td > 打印回溯信息。如果系统自主进入内核调试状态,通常需要输入该命令。< / td > < / tr >
< tr > < td > < span class = "cli" > ints< / span > < / td > < td > < / td > < td > 显示已处理和未处理的硬件中断。< / td > < / tr >
< tr > < td class = "onelinetop" > < span class = "cli" > co< / span > (aka continue)< / td > < td > < / td > < td > 离开内核调试状态;如果可能的话,继续正常的系统操作。< / td > < / tr >
< tr > < td > < span class = "cli" > reboot< / span > < / td > < td > < / td > < td > 立即重启系统。您将会丢失所有未保存的数据,甚至包括那些已经保存,但是还未写入硬盘的数据。< / td > < / tr >
2010-08-11 21:56:45 +04:00
< / table >
2010-09-17 17:28:39 +04:00
< p > 获取更多信息,请参阅 < a href = "http://www.haiku-os.org/documents/dev/welcome_to_kernel_debugging_land" > 欢迎使用内核调试工具< / a > 。< / p >
< p > KDL输出信息将会写入到串行端口( 如果您拥有另一台与之相连接的计算机, 您可以通过中断程序重定向输出信息) 和系统日志。如果您无法离开KDL, 它将无法写入系统日志文件。尽管如此, 还有一个系统引导调试选项, 允许您捕获系统信息( 参阅下文) 。< / p >
2010-08-11 21:56:45 +04:00
< h3 > < a href = "#" > < img src = "../images/up.png" style = "border:none;float:right" alt = "index" / > < / a >
2010-09-17 17:28:39 +04:00
< a id = "syslog" name = "syslog" > 系统日志< / a > < / h3 >
< p > < b > 这是从无法引导的系统中获取信息的首选方法。< / b >
< br / >
系统日志( syslog, system log的缩写) 中包含了关于系统问题的有用信息, 包括KDL会话的输出信息 。通常将它附带到有关内核问题的报告中是个不错的主意。系统日志将会写入文件 < span class = "path" > /boot/common/var/log/syslog< / span > 。由于写入文件需要系统处于运行状态, 因此当内核出现问题时( 尤其是, 系统自动重启, 或者无法持续KDL会话) , 最新的输出信息可能无法写入日志文件。< / p >
< p > 引导程序的< span class = "menu" > Debug menu< / span > 中的< span class = "menu" > Enable debug syslog< / span > 选项可以使系统日志在内存中稍微持久的存在。默认情况下,它是启用的。 “稍微持久” 意味着, 它可以在一次机器重置之后仍然存在, 在之后直接进入引导程序菜单时仍然可以访问。尽管如此, 引导一个操作系统将会( Haiku 肯定会,其他的可能会)损坏该信息。 所以您需要在引导时按下 < span class = "key" > SHIFT< / span > 进入引导程序菜单。< br / >
在引导程序的 < span class = "menu" > Debug menu< / span > 中,您可以找到 < span class = "menu" > Display syslog from previous session< / span > 和 < span class = "menu" > Save syslog from previous session< / span > 两个入口。前者将系统日志显示于屏幕, 后者允许您将其保存到硬盘。需要注意的是, 目前只有FAT32卷支持保存该文件。如果您使用USB磁盘, 但是插入晚了, 可能它将不被识别; 您可以重置机器, 然后再次进入引导程序菜单。但是还要注意: 不要无意的启动任何操作系统, 否则数据将会丢失。< / p >
2010-08-11 21:56:45 +04:00
< h3 > < a href = "#" > < img src = "../images/up.png" style = "border:none;float:right" alt = "index" / > < / a >
2010-09-17 17:28:39 +04:00
< a id = "onscreen" name = "onscreen" > 屏幕调试< / a > < / h3 >
< p > < b > 屏幕调试输出仅对调试特殊问题有用,而且自身也有(定时)问题。若非必须,不要使用它。< / b > < br / >
只有当Haiku引导机器失败, 而且 < span class = "menu" > Debug syslog option< / span > 出于某些原因无法使用,它才具有重要意义。 在Haiku的引导徽标出现之前, 按下 < span class = "key" > SHIFT< / span > 进入引导程序菜单。 选择 < span class = "menu" > Select safe mode options< / span > 。 在接近屏幕底部,< span class = "menu" > [ ] Enable on screen debug output< / span > 将会列出。( 注意: 如果尝试启动Haiku, 您可以启用另一个选项。如果Haiku只有在启用多个选项时才可以启动, 您在错误报告中一定要给出这些选项。) < br / >
最后,选择 < span class = "menu" > Return to main menu< / span > 和 < span class = "menu" > Continue booting< / span > 。< br / >
在屏幕上将会显示一页或者多页文本,只有最后几行才需要附带到您的错误报告。更多信息,参阅 < a href = "../../../userguide/zh_CN/bootloader.html" > 引导程序< / a > 。< / p >
2010-08-11 21:56:45 +04:00
< h2 > < a href = "#" > < img src = "../images/up.png" style = "border:none;float:right" alt = "index" / > < / a >
2010-09-17 17:28:39 +04:00
< a id = "hardware" name = "hardware" > 硬件错误< / a > < / h2 >
< p > 在处理有关硬件/驱动的问题时,您需要在报告中附带下面的信息:< / p >
2010-08-11 21:56:45 +04:00
< table summary = "layout" border = "0" cellpadding = "2" cellspacing = "0" >
2010-09-17 17:28:39 +04:00
< tr > < td > - < span class = "cli" > listdev< / span > < / td > < td > < / td > < td > 给出所有硬件的详细列表,包括提供商和 PCI ID; 类似于Linux下的 < span class = "cli" > lshw< / span > 和 < span class = "cli" > lspci< / span > 。< / td > < / tr >
< tr > < td > - < span class = "cli" > listusb -v< / span > < / td > < td > < / td > < td > 假如是有关 USB 的问题, 它类似于Linux下的 < span class = "cli" > lsusb< / span > 。< / td > < / tr >
< tr > < td > - < span class = "cli" > open /var/log/syslog< / span > < / td > < td > < / td > < td > Haiku的主要系统日志, 类似于引导过程中的屏幕调试信息。您可以使用 < span class = "cli" > open< / span > 命令在文本编辑器中获取到系统日志中相关的部分。< / td > < / tr >
< tr > < td class = "onelinetop" > - < span class = "cli" > listimage | grep drivers/< / span > < / td > < td > < / td > < td > 列出所有使用的驱动。< / td > < / tr >
< tr > < td > - < span class = "cli" > ints< / span > < / td > < td > < / td > < td > 只在 < i > 内核调试状态< / i > 可用(参阅下文)。它用显示中断使用情况。不可能有许多由不同硬件共享的中断。< / td > < / tr >
< tr > < td colspan = "3" > - 屏幕调试输出(引导时间选项的安全模式)。< / td > < / tr >
2010-08-11 21:56:45 +04:00
< / table >
2010-09-17 17:28:39 +04:00
< p > 前四个命令需要在终端中进行输入。在命令后添加 < span class = "cli" > > output.txt< / span > , 然后输出的信息将会重定向到“output.txt”文本文件, 您可以将其附带到您的错误报告或者邮件。< / p >
2010-07-08 22:03:41 +04:00
2010-08-11 21:56:45 +04:00
< h2 > < a href = "#" > < img src = "../images/up.png" style = "border:none;float:right" alt = "index" / > < / a >
2010-09-17 17:28:39 +04:00
< a id = "next" name = "next" > 下一步< / a > < / h2 >
< p > 在您提交错误报告之后,开发人员将会检查您的错误,然后尝试进行修复。但是需要注意的是,我们所有的人员都是志愿者,有时候一个错误报告可能会很长时间没有人来进行回复。如果可以的话,添加新的信息将会有助于早点修复错误,但是请不要添加非描述性的评论来将“炒热”该错误。< / p >
< p > 切记, 提交错误报告不是花很少时间写个报告, 然后就结束了。如果您提交了一个错误, 然后您就是Haiku开发过程中的一员。开发人员在解决您的错误过程中可能会遇到问题, 因此请你一定要始终关注该错误, 然后回答相关的问题。如果该问题没有“fixed”, 你的任务就没有“done”。< / p >
2010-07-08 22:03:41 +04:00
< / div >
< / div >
< div class = "nav" >
< div class = "inner" > < span >
< a href = "../welcome_zh_CN.html" class = "uplink" > Welcome< / a >
< / span > < / div >
< / div >
< / body >
< / html >