我们如何追踪 Linux 中程序崩溃的问题?

Jim*_*Jim 13 linux logs debugging application

如果应用程序在 Windows 中崩溃,我们可以检查管理工具中的事件查看器以查看崩溃的原因。有时它有有用的信息,而其他人没有,但这是一个开始。
在 linux 中,如果一个应用程序(任何)崩溃了,人们如何开始跟踪发生了什么?
是否有一些中央日志或类似的东西?

gol*_*cks 13

是否有一些中央日志或类似的东西?

系统日志的正常位置是/var/log/. 每个日志中放入的内容取决于 syslog 配置,但通常除了登录名之外的所有内容都转到/var/log/syslog.

这并不能保证个别应用程序会在出现问题时留下任何线索。但是它们或外壳程序可能会向标准输出/标准错误流吐出一些东西,如果您从终端在前台运行一个麻烦的应用程序,您将能够看到那些东西。

  • 如果您可以使崩溃发生,请这样做,然后查看 /var/log 下的哪个文件最近被更改。使用`ls -lart`,列表中的最后一个文件是最近更改的。 (2认同)

sas*_*alm 7

在 Ubuntu 上,段错误被写入/var/log/kern.log. 我通过创建一个段错误的程序来测试它:

void main() {
    int *a=0;
    *a=0;
}
Run Code Online (Sandbox Code Playgroud)

在它出现段错误之后,有一行/var/log/kern.log

a.out[534]: segfault at 0 ip 08048432 sp bfaec8c0 error 6 in a.out[8048000+1000]
Run Code Online (Sandbox Code Playgroud)