反汇编共享库 - 显示哪个版本?
Disassembling shared library - which version is shown?
我正在使用 gdb 调试间歇性崩溃。我可以打开核心转储,并看到崩溃发生在共享库中。 (虽然我没有库的源代码,但我可以在回溯中看到函数名和库的文件名。)
同时,库已更新,因此文件名现在包含的库版本与生成核心转储时加载的版本不同。
我可以 运行 disassemble
查看发生崩溃的函数的机器代码 - 但我会看到崩溃发生时正在使用的版本的代码,还是会加载 gdb磁盘上库文件中的代码,从而选择不匹配的版本?
would I see the code from the version in use when the crash occurred, or will gdb load the code from the library file on disk, thereby picking a mismatching version?
后者(版本不匹配)
默认情况下,可执行文件(和其他只读映射)不保存在core
中以保存space -- 内容 已在磁盘上可用。
在 Linux 上,您可以要求您的系统使用以下方式保存只读映射:
echo 0x7 > /proc/self/coredump_filter
参见man 5 core
。
我正在使用 gdb 调试间歇性崩溃。我可以打开核心转储,并看到崩溃发生在共享库中。 (虽然我没有库的源代码,但我可以在回溯中看到函数名和库的文件名。)
同时,库已更新,因此文件名现在包含的库版本与生成核心转储时加载的版本不同。
我可以 运行 disassemble
查看发生崩溃的函数的机器代码 - 但我会看到崩溃发生时正在使用的版本的代码,还是会加载 gdb磁盘上库文件中的代码,从而选择不匹配的版本?
would I see the code from the version in use when the crash occurred, or will gdb load the code from the library file on disk, thereby picking a mismatching version?
后者(版本不匹配)
默认情况下,可执行文件(和其他只读映射)不保存在core
中以保存space -- 内容 已在磁盘上可用。
在 Linux 上,您可以要求您的系统使用以下方式保存只读映射:
echo 0x7 > /proc/self/coredump_filter
参见man 5 core
。