【问题标题】:GCC - generate absolute paths for #includes in debug symbolsGCC - 为调试符号中的#includes 生成绝对路径
【发布时间】:2012-11-13 13:59:40
【问题描述】:

操作系统是 Windows,GCC 是 4.7.2,GDB 是 7.3。

我在 C:/project/src/ 文件夹中有一个 .c 文件,其中包含:

#include "../inc/header.h"

编译后我在调试符号中有一个相对路径:

> objdump -WL obj.o | grep header.h
C:/project/src/../inc/header.h
...

但我希望它是 C:/project/inc/header.h,因为如果我在发出 set breakpoint 命令时使用绝对路径,在 gdb 中设置 BP 对我来说会失败。

这种情况是人为的,但由于环境条件,我的问题的唯一解决方案是在调试符号中生成绝对路径或教 GDB 解析相对路径。

在调试符号中是否有 GCC 开启绝对路径生成的开关?

【问题讨论】:

  • 另一种解决方案是在将../inc 添加到包含路径(例如,使用-I)之后将您的构建修复为#include "header.h"
  • 确实如此,但我不能更改源代码,只能更改编译器标志。
  • 许多编码标准禁止以./../ 开头的相对路径是有充分理由的。

标签: gcc gdb debug-symbols


【解决方案1】:

解决方案在 GDB 中,而不是在 GCC 中。

最简单的方法是将包含头的目录添加到搜索路径中:

(gdb) directory /path/to/include/

您可能需要一个更复杂的路径名替换规则:

(gdb) set substitute-path ../inc /path/to/inc

【讨论】:

  • 是的,这可行,但我不能接受这个作为答案。我的问题比较具体。我正在编写一个在 MI 上使用 GDB 并仅向其提供绝对路径的工具。我希望我的工具的最终用户不要考虑#include 路径格式,这就是为什么我需要为他们提供解决方法(GCC 选项)或适当地设置 GDB。如果两者都做不到,那么我能想到的就是手动解析符号并计算替换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-07
  • 2015-06-10
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
  • 1970-01-01
相关资源
最近更新 更多