如图所示,我们已经部署了启用了apport的Ubuntu服务器。

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


不幸的是,apport处理非打包应用程序崩溃的行为并不完全符合我们的喜好。在这些情况下,apport在工作目录中生成“核心”文件(假设ulimit -c设置正确)。例如,在审批日志中,

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文件规范)。 ..有什么办法可以做到吗?

最佳答案

另一种选择是使用Apport处理崩溃。它将保存核心转储,以及有关崩溃的大量其他有用上下文。将以下行添加到~/.config/apport/settings(如果不存在则创建它):

[main]
unpackaged=true


现在,崩溃将在/var/crash中显示为Apport .crash文件。您可以使用apport-unpack解压缩它们。

一个警告:似乎如果用户未选中“发送错误报告”复选框,Apport仍然尝试将这些崩溃上传到Ubuntu错误跟踪器;如果您正在使用专有代码等,这可能是个问题。我正在寻找有关此的更多信息;似乎/etc/apport/crashdb.conf可以控制崩溃报告的发送位置。

关于ubuntu - 如何更改未打包应用程序崩溃时的默认行为?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14204961/

10-09 23:01