首页 > 解决方案 > gdb 从不同位置查找标头

问题描述

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

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

在调试 P1 时,GDB 使用 L2 中的标头。这是意料之中的。但是在调试P2时,L1中的头文件被GDB使用......

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

标签: boostgdb

解决方案


gdb如何找到不同的位置?

P1本身可能不使用 Boost,但 P2 使用。

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

如果第二个命令导致非空输出,则说明您违反了 ODR,并且您的程序可能有各种未定义的行为(包括看似正常工作,但因程序或库的正确微小更改而中断)。


推荐阅读