2012-07-20 152 views
8

當用clang ++編譯我的項目時,源文件的路徑顯然不包含在目標代碼中。這意味着gdb無法找到用來顯示代碼的源文件。對於特定的情況,我可以使用gdb的directory命令添加一個目錄,但是我的項目有很多源目錄,這很快就會變得煩人。gdb找不到編譯的源文件++

當我將配置切換到使用g ++時,gdb只查找我所有的源文件。

此功能在Snow Leopard上運行clang ++ 2.9,但不適用於Lion上的clang ++ 3.1。我有XCode 4.3.2。

是否有一個強制完整路徑在目標文件中使用的選項?我的配置可能有其他問題嗎?

+0

我不確定,但你做了'-d'嗎? – 2012-08-09 13:36:25

+0

@NeelBasu我的源文件分佈在40個目錄中,我寧願不使用'-d' 40次。 – robert 2012-08-09 19:45:53

回答

4

我發現了這個問題:使用層次化makefile創建項目時會發生問題。如果一個子目錄是從父目錄構建的(在我的makefile中:make -w -C sub-dir),那麼gdb無法打開源文件。當更改爲子目錄併爲此目錄調用make時,gdb會查找源代碼。您可以通過在生成的對象文件中搜索構建路徑來驗證這一點。我用strings object-file | grep $HOME

我還注意到:這不是發生一個目標文件:該文件尚未與CC編譯。該文件已用esql編譯。最後,esql調用CC。

這就是爲什麼我試過這個解決方法:不要直接從make調用clang。從shell腳本中調用clang。

$ cat ~/bin/mycc 

/usr/bin/cc "[email protected]" 

$ export CC=mycc 
$ make 

萬歲! gdb打開源文件!

順便說一句:用(cd sub-dir;make -w)代替make -w -C sub-dir是另一種解決方法。

+0

這很有趣,但我使用[waf](https://code.google.com/p/waf/),其中源以分層方式包含,但waf本身不是分層的。 – robert 2012-08-29 11:45:33

+0

已驗證:crated一個小項目。使用waf來構建項目。 gdb失敗:'1 \t ../dir1/foo.c:沒有這樣的文件或目錄.'。重建項目後:'CC = mycc ./waf-1.6.1 configure build'問題消失:'(gdb)list main int main(){ return 0; }' – Rene 2012-08-29 14:00:58

+0

我會盡力的。 – robert 2012-08-29 14:49:24