boost - gdb 从不同位置查找标头
问题描述
我有两个升压头位置 L1 和 L2。L1 是 gcc 可以找到的默认位置,而 L2 不是。在编译共享库时,我明确使用了 -IL2。
两个程序 P1 和 P2 调用共享库。
在调试 P1 时,GDB 使用 L2 中的标头。这是意料之中的。但是在调试P2时,L1中的头文件被GDB使用......
我假设所有调试符号和位置都是在编译时确定的。如果源代码没有移动,gdb 可以自动找到它们。L1 也不在 GDB 的源路径中。gdb如何找到不同的位置?
解决方案
gdb如何找到不同的位置?
P1本身可能不使用 Boost,但 P2 使用。
readelf -wl P1 | grep L1
您可以使用和确认这一点readelf -wl P2 | grep L1
。
如果第二个命令导致非空输出,则说明您违反了 ODR,并且您的程序可能有各种未定义的行为(包括看似正常工作,但因程序或库的正确微小更改而中断)。
推荐阅读
- r - 如果满足条件,则用向量填充列
- c# - 使用 IgnoreQueryFilters() 的 Entity Framework Linq 查询在延迟加载属性上不起作用,即使包含
- java - spring数据JPA中的排序表达式
- javascript - 无法在 Vue js 变量中赋值
- java - 将列添加到 Cassandra db 而不会丢失数据
- ios - CoreML 输出标签 NSCFString - 标签未正确显示
- angular - 在浏览器后退按钮后设置/保留 Angular 反应式表单值
- sql - 舍入脚本根据持续时间精确到 15 分钟,如何将此阈值移动负 30 秒以表示十进制小时
- javascript - 使用 Javascript/AJAX 将 HTTP GET 请求发送到相机阻止的 CORS 策略(本地网络)
- apache-spark - 如何使用动态查询流控制 Spark Stream?