gdb从不同位置查找标头

时间:2018-04-27 04:28:18

标签: boost gdb

我有两个升压头位置L1和L2。 L1是gcc可以找到的默认位置,而L2不是。编译共享库时,我明确使用了-IL2。

两个程序P1和P2调用共享库。

调试P1时,GDB使用L2中的标头。这是预料之中的。 但是在调试P2时,L1中的标头由GDB使用......

我假设所有调试符号和位置都是在编译时决定的。如果未移动源代码,gdb可以自动找到它们。并且L1也不在GDB的源路径中。 gdb如何找到不同的位置?

1 个答案:

答案 0 :(得分:2)

  

gdb如何找到不同的位置?

P1很可能本身使用Boost,但P2确实如此。

您可以使用readelf -wl P1 | grep L1readelf -wl P2 | grep L1确认这一点。

如果第二个命令导致非空输出,则表示存在ODR违规,并且您的程序可能具有各种未定义的行为(包括显示以正常工作,但是要将正确的细微更改分解为该计划或图书馆。)