我正在使用gdb来调试间歇性崩溃。我可以打开核心转储,并看到崩溃发生在共享库中。 (我可以在回溯中看到函数名和库的文件名,但我没有库的源代码。)
同时,库已更新,因此文件名现在拥有的库版本与生成核心转储时加载的库版本不同。
我可以运行disassemble
来查看发生崩溃的函数的机器代码 - 但是我会在发生崩溃时看到正在使用的版本的代码,或者gdb是否会从库文件中加载代码在磁盘上,从而选择不匹配的版本?
答案 0 :(得分:1)
我会在崩溃发生时看到正在使用的版本中的代码,还是gdb会从磁盘上的库文件中加载代码,从而选择不匹配的版本?
后者(不匹配的版本)。
默认情况下,可执行文件(和其他只读映射) 保存在core
中以节省空间 - 内容 已经可用磁盘。
在Linux上,您可以要求系统保存只读映射:
echo 0x7 > /proc/self/coredump_filter
请参阅man 5 core
。