linux - 配置 kern.log 以提供有关段错误的更多信息

标签 linux logging segmentation-fault kernel debian

目前我可以在 kern.log 中找到这样的条目:

[6516247.445846] ex3.x[30901]: segfault at 0 ip 0000000000400564 sp 00007fff96ecb170 error 6 in ex3.x[400000+1000]
[6516254.095173] ex3.x[30907]: segfault at 0 ip 0000000000400564 sp 00007fff0001dcf0 error 6 in ex3.x[400000+1000]
[6516662.523395] ex3.x[31524]: segfault at 7fff80000000 ip 00007f2e11e4aa79 sp 00007fff807061a0 error 4 in libc-2.13.so[7f2e11dcf000+180000]

(你看,导致段错误的应用被命名为 ex3.x,表示练习 3 可执行文件)。

有没有办法让 kern.log 记录完整路径?像这样的东西:

[6...] /home/user/cclass/ex3.x[3...]: segfault at 0 ip 0564 sp 07f70 error 6 in ex3.x[4...]

所以我可以很容易地从谁(用户/学生)那里找出这个 ex3.x 是谁?

谢谢! 成为

最佳答案

该日志消息来自内核,具有固定格式,仅包括可执行文件的前 16 个字母,不包括按照 show_signal_msg 的路径。 ,请参阅非 x86 架构上的段错误的其他相关行。

正如 Makyen 所提到的,如果不对内核进行重大更改和重新编译,传递给 klogd 并传递给 syslog 的消息将不会包含您请求的信息。

我不知道 syslog 或 klogd 中有任何日志转换或注入(inject)功能可以让您获取文件名并在文件系统上运行 locate 或 file 以找到完整路径。

获取所需信息的最佳方法是使用崩溃拦截软件,例如 apportabrtcorekeeper .这些工具存储来自/proc 文件系统的进程元数据,包括进程的命令行,其中包括运行的目录,假设二进制文件以完整路径运行,并且不在路径中。

另一种更通用的方法是启用核心转储,然后设置/proc/sys/kernel/core_pattern 以包含 %E , 为了让核心文件名包含二进制文件的路径。

关于linux - 配置 kern.log 以提供有关段错误的更多信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25714501/

相关文章:

linux - 截断匹配字符串的最后一行直到 EOF 的 shell 命令输出

java - 当我增加 tomcat 上的负载时,log4j2 ParameterFormatter.appendCollection 中出现 ConcurrentModificationException

C - 使用出队进行回绕时队列的段错误

c - 段错误 - 大数组

c++ - 段错误(C++)

linux - Linux 中 USB 设备的文件系统有任何更改时如何获得通知或如何递归使用 inotify

linux - 如何在 linux 系统中启动 LWUIT 资源编辑器?

ios - 谷歌分析 3.08 IOS idfa 类丢失,不会收集 idfa

java - SVN提交日志问题

linux - 发送数据时是否可以选择网络适配器