2012-11-13 45 views
1

OS是Windows,GCC是4.7.2,GDB是7.3。GCC - 在调试符号中为#includes生成绝对路径

我在C .c文件:与/项目/ src目录/文件夹中的包括:

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

汇编我在调试符号的相对路径后:

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

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

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

是否有一个开关让GCC打开调试符号中的绝对路径生成?

+1

另一个解决方案是在将'../ inc'添加到包含路径(例如使用'-I')之后,将您的构建修复为'#include“header.h”'。 –

+0

确实如此,但我无法更改源代码,只有编译器标志。 –

+0

很多编码标准都禁止以'。/'或'../'开头的相对路径。 –

回答

2

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

最简单的方法是添加包含标题到搜索路径的目录:

(gdb) directory /path/to/include/ 

一个更复杂的一个,你可能需要的是路径替换规则:

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

是的,那可行,但我不能接受这个答案。我的问题很具体。我正在编写一个使用GDB而不是MI的工具,并且只向它提供绝对路径。我希望我的工具的最终用户不要考虑#include路径格式,这就是为什么我需要为他们提供解决方法(GCC选项)或适当地设置GDB。如果两者都不能完成,那么我所能想到的就是手动解析符号并计算替换。 –