我有一个类似于以下项目层次结构:
src/
code.c
ext/
lib/
lib.c
lib.a
bin/
bin-code (+x)
obj/
code.o
lib.c
使用lib.a
标记然后-g2
汇编到ar
。code.c
使用bin/obj/code.o
标记汇编到-g2
。lib.a
和code.o
链接到二进制bin-code
。我正在bin-code
内遇到一个错误,我正在尝试使用 GDB 来加载lib
的符号/来源,以便我可以使用TUI进行检查。
我正在为lib.c
内的函数添加一个断点,它似乎找到了它,因为它回显了一个地址并说它成功设置了断点。
当我运行程序并点击断点时,我用 Ctrl X / Ctrl A 打开TUI ,但它声称没有找到任何来源。
值得一提的两件事:
set substitute-path
。directory
条目,但无济于事。我在这里遗漏了什么吗?是否有命令我可以发布GDB以重新扫描目录或其他什么?我无法显示库的源代码,即使它已经加载了符号。
答案 0 :(得分:1)
很可能gdb无法找到您静态库的来源,也无法显示它的源代码。
如果在构建二进制文件或将源移动到另一个目录后将其移动到另一台计算机,则可能会发生这种情况。在这种情况下,您应该set substitute-path
。您可以使用lib.c
命令查看gdb尝试在哪里查找静态库(info sources
)的源代码。将此路径与lib.c
实际所在的路径进行比较,这有助于设置正确的path substitution。