我在交叉编译环境中使用 gdb,在其中为目标架构构建了一个 linux 树,包括许多共享库。
问题:当我分析核心转储时,gdb 找到了我的 .so 文件及其符号的路径,但没有找到它们的源文件。
主机设置:
tree/
<-- 构建根目录
tree/apps/myapp/myapp
<--我的崩溃应用
tree/libs/mysharedlib/
<-- 共享库是从这样的路径构建的,并安装在 target/
tree/target/
<-- 目标构建根
tree/target/usr/bin/
<-- 我崩溃的二进制文件放在这里
tree/target/lib
<-- 一些 .so:s
tree/target/usr/lib
<-- 还有一些 .so:s
示例输出:
...
#9 0x2b038cfc in start_thread (arg=0x32dff4d0) at pthread_create.c:302
302 pthread_create.c: No such file or directory.
in pthread_create.c
...
gdb 如何知道默认在哪里搜索源文件?
我知道可以在 gdb 中使用 'directory' 命令手动指定源目录,并且它可以工作,但我不想对每个共享库都这样做。我想设置构建我所有东西的根。当我使用 gdbserver 进行实时调试时,gdb 会自动查找所有共享库的源,因此我希望核心文件具有相同的行为。
是只有在二进制文件的调试信息中指定的 .c 文件名还是它们也有路径?相对还是绝对?