目前我可以在 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 以找到完整路径。
获取所需信息的最佳方法是使用崩溃拦截软件,例如 apport或 abrt或 corekeeper .这些工具存储来自/proc 文件系统的进程元数据,包括进程的命令行,其中包括运行的目录,假设二进制文件以完整路径运行,并且不在路径中。
另一种更通用的方法是启用核心转储,然后设置/proc/sys/kernel/core_pattern 以包含 %E , 为了让核心文件名包含二进制文件的路径。
关于linux - 配置 kern.log 以提供有关段错误的更多信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25714501/