为什么GDB不识别我的图书馆符号?

时间:2015-06-04 02:37:54

标签: gdb static-libraries

我有一个类似于以下项目层次结构:

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.acode.o链接到二进制bin-code

我正在bin-code内遇到一个错误,我正在尝试使用 GDB 来加载lib的符号/来源,以便我可以使用TUI进行检查。

我正在为lib.c内的函数添加一个断点,它似乎找到了它,因为它回显了一个地址并说它成功设置了断点。

当我运行程序并点击断点时,我用 Ctrl X / Ctrl A 打开TUI ,但它声称没有找到任何来源。

值得一提的两件事:

  1. 由于我的构建系统(Tup)使用FUSE文件系统来强制执行读/写操作,因此我使用了set substitute-path
  2. 我尝试在搜索路径中添加directory条目,但无济于事。
  3. 我在这里遗漏了什么吗?是否有命令我可以发布GDB以重新扫描目录或其他什么?我无法显示库的源代码,即使它已经加载了符号。

1 个答案:

答案 0 :(得分:1)

很可能gdb无法找到您静态库的来源,也无法显示它的源代码。

如果在构建二进制文件或将源移动到另一个目录后将其移动到另一台计算机,则可能会发生这种情况。在这种情况下,您应该set substitute-path。您可以使用lib.c命令查看gdb尝试在哪里查找静态库(info sources)的源代码。将此路径与lib.c实际所在的路径进行比较,这有助于设置正确的path substitution

相关问题