2012-11-13 32 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。如果兩者都不能完成,那麼我所能想到的就是手動解析符號並計算替換。 –