0

我在交叉编译环境中使用 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 文件名还是它们也有路径?相对还是绝对?

4

0 回答 0