2013-01-07 51 views
5

我們有一個啓用了apport的Ubuntu服務器,如圖所示。如何更改非打包應用程序崩潰的apport默認行爲?

~$ cat /proc/sys/kernel/core_pattern 
|/usr/share/apport/apport %p %s %c 

不幸的是,apport在處理非打包應用程序崩潰時的行爲並不完全符合我們的喜好。 apport正在這些場景的工作目錄中生成「核心」文件(假設ulimit -c被適當設置)。例如,從Apport會日誌,

ERROR: apport (pid 10117) Tue Jan 8 08:56:25 2013: executable: /home/jess/a.out (command line "./a.out") 
ERROR: apport (pid 10117) Tue Jan 8 08:56:25 2013: executable does not belong to a package, ignoring 
ERROR: apport (pid 10117) Tue Jan 8 08:56:25 2013: writing core dump to /home/jess/core (limit: 18889465931478580853760) 

無奈的是,一旦一個核心文件是存在的它不會被覆蓋。例如,如果我們正在測試應用程序並忘記從工作目錄清除舊的核心文件,那麼應用程序在測試期間崩潰,我們將看不到新的核心文件。即使它被覆蓋,這可能並不理想,因爲我們然後失去了舊的核心。

理想情況下,我們希望能夠通過例如參數告訴apport,對於非打包的應用程序情況,生成一個文件名爲根據指定模式格式化的核心文件(根據core_pattern文件規範)...有沒有這樣做的方法,或者有什麼相同的東西?

+0

可能存在[未生成核心轉儲文件]的副本(http://stackoverflow.com/questions/7732983/core-dump-file-is-not-generated) – conradkdotcom

回答

0

如果它是一個未打包的二進制文件,apport仍然會遵守/proc/sys/kernel/core_uses_pid,所以你可以設置它來增加獲得正確核心文件的機會。

/proc/sys/kernel/core_pattern被認爲是對apport本身的引用,所以在這種情況下,沒有什麼東西可以適用。

您可以看到/usr/share/apport/apport腳本中由內核內核模式與apport調用的代碼。

一個明顯的選擇是創建一個新的Python腳本來使用,就像那樣,但在write_user_coredump函數中進行了修改,然後通過內核內核模式sysctl掛鉤。

1

另一種選擇是使用Apport來處理你的崩潰。它將保存核心轉儲以及大量關於崩潰的其他有用上下文。添加以下行來~/.config/apport/settings(創建它,如果它不存在):

[main] 
unpackaged=true 

現在崩潰將出現Apport會.crash在/var/crash文件。你可以用apport-unpack解開它們。

一個警告:如果用戶離開'發送錯誤報告'複選框被選中,似乎Apport仍然嘗試將這些崩潰上載到Ubuntu bug跟蹤器;這可能是一個問題,如果你正在處理專有代碼等。我正在尋找更多的信息;看起來/etc/apport/crashdb.conf可以控制崩潰報告發送的位置。

相關問題