自动汇报错误工具(ABRT)

ABRT 是一套抱著三个目标而开发出来的规模工具:

  1. 简化用户汇报软件问题的程序
  2. 在提交给开发者的报告中提供全面的信息
  3. 提供重要的故障数据以便排列优先次序及安排支持

假如你有兴趣协助开发者排列他们的工作的优先次序,而你愿意提供匿名的报告,请利用以下指令启用自动汇报

abrt-auto-reporting enabled

详情见 迷你报告的网上文档abrt-auto-reporting(1)

1. ABRT 工作流程

  1. 在最常用的编程环境下挂入专用的故障处置器
    • 为 C/C++ 应用程序注册故障时用的 core dump 程序
    • 为漏网的 Python 异常注册处置器
    • 为漏网的 Ruby 异常注册处置器
    • 提供 JNI 代理器检测漏网的 Java 异常
  2. 在系统日志内寻找可疑的符串

    • 检测内核 oops
    • 检测 Machine-check 异常
    • 在 Xorg 的日志内检测 Xorg 故障
  3. 检查描述问题的文件是否存在
    • 检测及检阅 kdump 创建的内核转储档
  4. 提供命令行及图像界面工具(abrt-cli 及 gnome-abrt)发送报告及检阅已发报告
  5. 在 ABRT 的故障数据服务器上收集数据。ABRT 服务器的主要用途是协助维护者安排工作的优先次序,及就已知或已修正的问题向用户提供指引。

2. ABRT 结构

一旦检测到问题,ABRT 便会在缺省的路径创建一个目录,然后将收集到的所有数据以普通文档的方式放进该目录。

用来创建问题目录的缺省路径是:

每个问题目录内最有趣的文件包括:

executable

出现问题的执行档的绝对路径

package

该执行档的所属 rpm 组件

count

该问题在系统上出现的次数

time

该问题首次出现的 unix 时戳

coredump

编译程序故障时的 core dump 档(C/C++)

backtrace

活动调用函数的清单

dso_list

故障时已装入的动态函数库清单

var_log_messages

系统日志内有关此问题的记录

如果你需要手动式检阅问题目录,或只是想明白问题是关乎什么,ABRT 为你提供数个好用的规模工具。这些工具的名称都以 abrt-action 起首,因此你可以进入问题目录,输入 abort-action 再按 Tab 键。

3. 从 coredump 档读入 backtrace 的样例:

ABRT 不会自动从 core dump 档读入 backtract,因为这个动作需要侦错用的数据。

你可以通过 debuginfo-install 指令手动安装 gdb 推荐的侦错用数据:

$ gdb $(cat executable) -c coredump 

你也可以让 ABRT 为你做所需的事情:

$ abrt-action-analyze-ccpp-local

abrt-action-analyze-ccpp-local 启用所有 *debug* yum 软件库,下载违漏的侦错数据组件,在 /var/cache/abrt-di/ 下解压它们,执行 gdb 并将输出存于 backtrace 档内。


4. 通知

ABRT 提供了数个可设置的方法通知用户有关操作系统的故障。缺省的通知方法有桌面通知,发电邮姶 root(采用缺省 MTA,设置可在 /etc/libreport/events.d/mailx_event.conf 内修改)及控制台通知,例如

ABRT has detected 1 problem(s). For more info run: abrt-cli list --since 1414407227

5. 安装

在无头系统执行以下指令:

$ yum install abrt-cli

或者在桌面执行

$ yum install abrt-desktop

abrt-cliabrt-desktop 是中继组件,将会为你的系统引进最有用的组件。

6. 设置

配置文件都收藏在:

你提供给ABRT GUI的配置选项的值被存储在GNOME Keyring里。

7. 向 CentOS 的 Bug 追踪系统报告

由 CentOS 7.1.1503 起,ABRT可以向 bugs.centos.org 报告故障。为了发送 bug,你必须在 bugs.centos.org 创建你自己的账户,并且在提交 bug 报告之前 ABRT 会提示你提供你帐户的详细信息。

这个功能需要 coredump 产生的 backtrace 信息,ARBT 有能力在本地或远程使用 https://fedorahosted.org/abrt/wiki/AbrtRetraceServer 生成 backtrace 信息,本地生成涉及到从 /var/cache/abrt-di 下载调试信息包,远程生成涉及到上传 coredump 到因特网上。

ABRT 提供给你两个选项去产生 backtrace 信息,因为 coredump 文件也许包含一些敏感信息,本地生成的 backtrace 也许需要下载 GiBs 的调试信息包。然而,追溯服务在开发时着重于安全,它对用户的好处非常值得关注。

因为 ABRT 的 bug 报告文件是公开的,故障数据经常包含敏感的安全类信息,例如密码,所以报告过程包括了两步来检验发布的数据。第一步,ABRT 标出可疑的字符串,你也可以搜索自己的自定义字符串。第二步,你可以从发布的数据集中排除掉相关文件。

8. 自动提交故障数据

除了检测问题及创建全面的错误报告外,ABRT 亦提供了一个功能,在检测到问题时自动为故障提交名为微报告(uReport)的精简、匿名描述。

微报告是匿名的,它们不含甚何有关 IP 地址、主机编号或主机名称的数据、甚至不含内存或文件系统的快照。微报告的已修辑至剩下最扼要的内容,有助服务器辨认重复的问题。

ABRT 服务器收集微报告,以便能为开发者提供故障数据,有助安排工作的优先次序。

你可以通过下列指令启用 ABRT 的这个功能:

$ abrt-auto-reporting enabled 

在缺省的设置中,ABRT 把故障数据发送至 ABRT 服务器

9. 参考

有关 ABRT 如何运作的详情,请拜访此连结:http://abrt.readthedocs.org/en/latest/

要是你不能采用某些功能,这里或许会有答案:http://abrt.readthedocs.org/en/latest/faq.html

如果你对 ABRT 的高级功能有兴趣,请查阅它的样例页:http://abrt.readthedocs.org/en/latest/examples.html

ABRT 计划位于 github.com 上:https://github.com/abrt

Translation of revision 10

zh/TipsAndTricks/ABRT (last edited 2015-04-08 08:56:08 by HaoLee)