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


12

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


2
调试这种事情的标准方法是从终端手动启动有问题的应用程序。这样,您可以看到打印的任何错误消息。
terdon

2
Linux的64位版本将在中记录崩溃进程的简短描述(一个由于信号而死亡的进程)/var/log/syslog。Linux提供了一种向守护进程通知进程崩溃的方法。Ubuntu的apport和Red Hat的abrt使用它来提供集中式日志记录和报告生成功能。通常,将保存核心转储,以便您可以在崩溃的程序上调用调试器。
Mark Plotnick 2014年

我本来会赞成这个问题,但是OP似乎不想通过接受或发布答案来帮助社区,所以我会找到一个类似的问题接受并赞成这个问题,希望它会上升到搜索结果的顶部并帮助将来的搜索者
Mawg说,请恢复Monica

Answers:


13

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

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

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


/var/log哪个日志文件中应该寻找什么?是否有约定?
2014年

2
如果可以使崩溃发生,请这样做,然后查看/ var / log下的哪个文件是最新更改的。使用ls -lart,列表中的最后一个文件是最近更改的。
Devon_C_Miller 2014年

有约定小号 - linux是比windows更异类。 Syslog是指系统记录器,但是没有通用的实现,因此可以用不同的方式配置变体。一般的逻辑是,应用程序将消息发送到syslog,然后将这些消息分类到不同的文件中。如上所述,通常所有内容都以结尾/var/log/syslog,但是不同发行版的处理方式有所不同。如果知道使用的是哪个syslog,则可以检查其配置来确定这一点。
goldilocks

6

在Ubuntu上,segfaults写在/var/log/kern.log。我通过创建一个segfaults程序来对其进行了测试:

void main() {
    int *a=0;
    *a=0;
}

段断开后,该行位于/var/log/kern.log

a.out[534]: segfault at 0 ip 08048432 sp bfaec8c0 error 6 in a.out[8048000+1000]

1

在Ubuntu中,如果要从.desktop启动器文件启动应用程序,请将该选项添加Terminal=true到.desktop文件中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.