软件包维护人员的文档

为您的包收集更多数据

如果程序开发人员(或包维护人员)需要ABRT没有收集的特定信息,他们可以编写一个自定义ABRT钩子来收集程序(包)所需的数据。这种钩子可以在问题处理过程中的不同时间运行,这取决于信息的“新鲜程度”。它可以运行:

  1. 在坠机时

  2. 当用户决定分析问题时(通常运行 gdb 在上面)

  3. 报告时

你所要做的就是创建一个 .conf 把它放在 /etc/libreport/events.d/ 从此模板:

EVENT=<EVENT_TYPE> [CONDITIONS]
   <whatever command you like>

命令将在当前目录设置为问题目录的情况下执行(例如: /var/spool/abrt/ccpp-2012-05-17-14:55:15-31664

如果需要在崩溃时收集数据,则需要创建一个将作为 post-create 事件。

WARNING: post-create events are run with root privileges!

这个示例钩子将节省文件的时间 dateofcrash 在ABRT检测到碰撞时:

EVENT=post-create component=binutils
        date > dateofcrash

一个更现实的例子:保存 smart 当其中一个工具 udisks 崩溃:

EVENT=post-create component=udisks
        which skdump >/dev/null 2>&1 || exit 0
        for f in /dev/[sh]d[a-z]; do
            test -e "$f" || continue
            skdump "$f"
            echo
        done >smart_data

如果要在报告问题时收集数据,则需要使用 collect_ 事件类型。例子::

EVENT=collect_syslog
        executable=`cat executable` &&
        base_executable=${executable##*/} &&
        grep -F -e "$base_executable" /var/log/messages | tail -999 >syslog

测试ABRT如何处理应用程序的崩溃

为了确保abrt能够处理应用程序的崩溃并正确生成回溯,您可以通过发送一个 SIGSEGV 信号(仅在C/C++应用场合):

kill -SIGSEGV $( pidof yourapp )

Abrt应该捕获崩溃并正确地生成一个问题目录。应该可以向ABRT分析公司和bugzilla报告这次事故。

使用自定义bugzilla模板

ABRT允许包维护人员通过为ABRT提供特定于组件的模板文件来覆盖包的默认Bugzilla错误格式。文件的结构必须符合 Bugzilla插件输出配置 必须储存在

  • /etc/libreport/plugins/bugzilla_format_$component.conf 初始错误格式和

  • /etc/libreport/plugins/bugzilla_formatdup_$component.conf 其他错误注释

模板文件引用上列出的ABRT问题元素 ABRT收集的元素 页。

Bugzilla插件输出配置

Bugzilla reporter插件接受 -F 选项(默认值: /etc/libreport/plugins/bugzilla_format.conf ),它允许用户修改新创建的bug的内容。此文件中的行具有以下格式:

# comment
%summary:: summary format
section:: element1[,element2]...
the literal text line to be added to Bugzilla comment. Can be empty.

摘要格式是一行文本,其中 %element% 替换为文本元素的内容,并且 [[...%element%...]] 块仅在以下情况下使用 %element% 存在。 [[...]] 积木可以筑巢。

截面可以是:

  • %attach:: 要附加的元素的列表。

  • 文本,双冒号 (:: )以及逗号分隔的元素列表。

元素可以是:

  • 目录元素名有问题,格式为

    <element_name>: <contents>
    

    <element_name>:
    :<contents>
    :<contents>
    :<contents>
    
  • 前缀为的目录元素名称有问题 %bare_ ,按原样格式化,没有 <element_name>: 开始冒号

  • %oneline%multiline%text 通配符,为输出或附件选择所有相应的元素

  • %binary 通配符,仅对 %attach 节,指示附加二进制元素

  • 前缀为“-”的目录元素名称有问题,它将给定元素从所有通配符中排除

不存在的元素将被忽略。如果不存在任何元素,则不会创建节。

例子:

%summary:: [abrt] %package%[[: %reason%]]

This bug was automatically created by ABRT.

Description of problem:: %bare_comment

Version-Release number of selected component:: %bare_package
Additional info:: \
 -analyzer,-count,-duphash,-uuid,-abrt_version,\
 -username,-hostname,\
 %oneline

Bogosection:: nonexistent_element_name

Backtrace:: %bare_backtrace

%attach:: -comment,-reason,-reported_to,-event_log,%multiline,coredump

请注意,空行是重要的。在上面的例子中,两行之间没有空行 Version-Release number of selected component附加信息 部分,这将导致这两个部分在新创建的bug描述中也没有空行。

默认配置文件