使用gdb调试第3个库的问题

时间:2011-10-20 21:23:36

标签: c++ gdb

我有一个开源的第三方库,其源代码文件安装在/opt/3RD_PARTY_LIBRARY/src/。当我使用这个库调试我的程序,并进入/opt/3RD_PARTY_LIBRARY/src/a.cpp中定义的函数时,gdb显示该函数正在某个文件/tmp/build/3RD_PARTY_LIBRARY-VERSION.x.x/opt/3RD_PARTY_LIBRARY/src/a.cpp中执行,而不是正常的/opt/3RD_PARTY_LIBRARY/src/a.cpp。< / p>

有人可以解释这是怎么发生的吗?这是由gdb还是第三方库引起的?

1 个答案:

答案 0 :(得分:0)

在编译时,GCC记录当前目录和(通常是相对的)文件名,并将其放入目标文件的调试信息中。

调试时,GDB将两者连接在一起,并在那里寻找源。

根据您描述的症状,第三方库是在/tmp/build/3RD_PARTY_LIBRARY-VERSION.x.x/opt/3RD_PARTY_LIBRARY/src目录中构建的(不是一件不寻常的事情)。

要解决此问题,最简单的解决方案是使用directory命令告诉GDB源代码现在在哪里:directory /opt/3RD_PARTY_LIBRARY/src应该这样做。

或者,这也应该有效:

mkdir -p /tmp/build/3RD_PARTY_LIBRARY-VERSION.x.x/opt/3RD_PARTY_LIBRARY
ln -s /opt/3RD_PARTY_LIBRARY/src /tmp/build/3RD_PARTY_LIBRARY-VERSION.x.x/opt/3RD_PARTY_LIBRARY