当一个应用程序崩溃而没有输出错误时,是否有日志我可以检查?

有时候会发生一些应用程序崩溃但没有输出错误的情况(在我的情况下是conky,可能是我的某个配置不正确)。
是否有一个错误日志可以查看,以了解它为什么会崩溃?
6个回答

这取决于应用程序。不同的应用程序有不同的日志系统;没有一个中央日志包含了系统上运行的所有程序的输出。

话虽如此,很多程序确实将它们的日志文件放在目录/var/log下。特别是文件/var/log/syslog(或者也可能是/var/log/messages),它包含了来自“系统日志记录器”的输出,这是系统提供的一个服务,程序可以选择使用它进行日志记录。但并不是所有的程序都使用它。通常,在那个文件中你会找到低级系统服务的消息,而不是你通常使用的图形化应用程序。

你可能想要阅读有关标准日志文件位置的更多信息


崩溃文件放在/var/log/crashes/中,用于使用apport报告错误。您可以使用apport-unpack提取核心转储,通过gdb分析该核心转储,找出导致程序崩溃的原因。
这一切都是基于您是一个程序员的前提。如果您不是...呃,无论如何也无法修复崩溃!

1这一切都是基于你是一个程序员的假设。如果你不是...嗯,无论如何你也无法修复崩溃!有了开源,我们都可以尝试解决自己的问题,当然要承担风险哦 ;) - Strae
@DaNiel:其实不是这样的!如果你不是一个程序员,对应用程序代码没有很好的理解,你越是乱改代码,可能会导致程序出现更多的错误 :) - AntonioCS
1即使你不是程序员,有时候查看核心转储也能给你关于问题的一些想法。例如,看起来它在某种图形例程中崩溃了——也许我应该更新一下显示驱动程序... - user1242
2...而且它有助于描述错误在错误报告/论坛中的情况 ;) - Strae
2你认识一些不会编程的人会使用gdb吗?我是一个程序员,能够做到的只有bt full这一步了,"哦看,一个带有缺失符号的回溯...猜测我需要安装调试符号并尝试重现崩溃..." 我曾经弄明白如何设置断点...但那已经是我在使用它方面最进阶的地方了。 - maco

对于conky来说,也可能是在$HOME/.xsession-errors中有条目。

一些应用程序具有可用于开启调试的标志,例如 -d,-D,--debug等。请查看应用程序的man页面(man [my-app])或使用-h标志运行应用程序,以查看是否有这样的选项。
许多图形界面应用程序会写入$HOME/.xsession-errors中,所以这是一个检查输出的好地方。
maco是对的,apport可能是获取良好调试信息的最保险方法。不过有时它无法捕获崩溃。
如果所有其他方法都失败了,您还可以通过在gdb中运行应用程序来强制获取信息。大致步骤如下:
$ gdb my-app

(gdb) run

尽一切所需使其崩溃...

(gdb) bt full

然后从那里开始。

如果你选择使用gdb,你还需要安装符号,如之前所提到的。请参考https://wiki.ubuntu.com/DebuggingProgramCrash获取详细指导。


毫无疑问,对我来说最好的答案。 - Claudi

你可以去/var/log/messages或crashes目录,然后在这些文件上运行grep命令,并搜索你正在寻找的应用程序。这些文件有时可能会很大,它将返回与你的应用程序相关的信息。 :)

如果你从一个.desktop启动器文件中启动你的应用程序,向你的.desktop文件添加选项Terminal=true。这样在运行程序时会打开一个终端,终端上的输出将类似于你通过命令行首次运行程序所看到的内容。这样,当图形用户界面崩溃或挂起时,你可以看到导致此问题的文本输出。

这个是做什么用的?我已经有这个设置了,但它没有记录任何额外的东西。 - Matt
我试着通过编辑我的回答来回答你的问题。这样说通顺吗? - Selah