我们有一个进程不断生成核心转储文件,但甚至不确定是哪个进程。我已按照说明使用崩溃实用程序来分析核心转储文件。我必须安装一个新的存储库并安装崩溃。现在它正在运行我得到这个:
crash: /usr/lib/debug/lib/modules/3.10.0-229.14.1.el7.x86_64/vmlinux and /home/user/d336599/core.26061 do not match!
知道解决方案吗?
答案1
如果您file
在核心转储上使用该命令,它应该能够告诉您生成核心转储文件的可执行文件的名称。
然后gdb <executable file> <core dump file>
将启动gdb
,并且bt
命令gdb
将产生程序崩溃的回溯。
但是,如果调试符号已从可执行文件中删除,您会发现回溯不会提供太多信息。在这种情况下,您可能必须为该可执行文件找到一个单独的调试符号表文件(版本必须完全匹配)并将其添加-s <symbol table file>
到 gdb 命令调用中。
如果核心转储被截断,您很可能会耗尽磁盘空间(正如您在评论中所述)。核心文件名/home/user/d336599/core.26061
表明您可能正在使用 RHEL7 sysctl 默认值kernel.core_pattern = "core"
和kernel.core_uses_pid = 1
.通过在 sysctl 中指定绝对路径名kernel.core_pattern
,您可以将核心转储重定向到另一个具有更多空间的磁盘。只需记住确保该目录对于拥有转储核心的程序的用户是可写的。
看man 5 core
有关如何kernel.core_pattern
指定生成核心转储文件的位置以及如何命名它们的更多信息。