我有一个开源的第三方库,其源代码文件安装在/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还是第三方库引起的?
答案 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