2017-04-13 32 views
0

我正在使用gdb来调试间歇性崩溃。我可以打开核心转储,并查看崩溃发生在共享库中。 (我可以在回溯中看到函数名称和库的文件名,但我没有该库的源代码。)反汇编共享库 - 显示哪个版本?

同时,库已更新,因此文件名现在成立与生成核心转储时加载的不同版本的库。

我可以运行disassemble来查看发生崩溃的函数的机器代码 - 但是当崩溃发生时我会看到正在使用的版本的代码,或者gdb会从磁盘上的库文件加载代码,从而选择不匹配的版本?

回答

1

我会在发生崩溃时看到正在使用的版本的代码,或者gdb会从磁盘上的库文件加载代码,从而选择不匹配的版本?

后者(不匹配版本)。

默认情况下,可执行文件(和其他只读映射)是保存在core以节省空间 - 内容磁盘上已经可用。

在Linux上,你可以问你的系统,以节省只读映射有:

echo 0x7 > /proc/self/coredump_filter 

man 5 core