[FrontPage] [TitleIndex] [WordIndex

This is a read-only archived version of wiki.centos.org

自動匯報錯誤工具(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. 設定

設定檔都收藏在:

7. 匯報給 CentOS 的錯誤追縱器

由 CentOS 7.1.1503 起,ABRT 能向 bugs.centos.org 匯報故障。若要遞交錯誤報告,你必須在 bugs.centos.org 建立你的帳戶 —— ABRT 在遞交錯誤報告前將會詢問該帳戶的資料。

此功能亦需要從 coredump 檔建立 backtrace。ABRT 有能力在本地建立 backtrace,當中涉及下載 debuginfo 套件至 /var/cache/abrt-di;或在 https://fedorahosted.org/abrt/wiki/AbrtRetraceServer 上遠端建立 backtrace,這涉及把 coredump 檔上載至互聯網。

ABRT 提供兩個建立 backtrace 的方案,因為 coredump 檔內或許會含有敏感資料,而在本地建立 backtrace 可能需要下載 GiBs 的 debuginfo 套件。然而,retrace 伺服器在開發時著重安全性,亦瞭解為用戶帶來的好處。

由於 ABRT 所遞交的錯誤報告是公開的,而故障數據往往包含密碼等敏感資料,因此遞交程序中有兩個檢閱發佈數據的步驟。首先,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


2023-09-11 07:23