2013-03-04 56 views
8

我試圖在網上搜索這個問題,但似乎我找不到解決我的問題的好方法。那麼,我試圖用gdb來調試我的C++程序。該程序由一個簡單的main.cpp和一個model.h組成。而編譯命令是如何在C++頭文件上使用gdb?

g++ -Wall -g -c main.cpp 
g++ -Wall -g main.o -o OUTPUT 

由於幾乎所有的算法被存儲在model.h,我需要調試頭文件,而不是cpp文件。但是,每當我試圖把一個破發點上的頭狀

tbreak model.h:163 

GDB總是給我一個消息,「沒有源文件名爲TNFmodel.h」。

在另一個問題breakpoints in GDB,我看到了一個解決方案,通過「dir」將包含頭的文件夾添加到庫中。但是我的頭文件已經在源文件夾中,並且在嘗試之後

dir ./ 

問題仍然存在。

那麼有人知道什麼是錯的?如何使用gdb調試頭文件?

+2

是編譯時還包含在該位置的頭文件嗎?也許你可以在輸入'info sources'時發佈輸出gdb。 – Nobody 2013-03-04 18:51:04

+0

哎喲...我查了一下資料,現在看到了這個問題......一封信的情況並不符合。那麼,我不知道我是如何通過編譯的......但也許這是因爲我使用的是mac,有時編譯時並不敏感。糾正這種情況後,gdb可以正常工作。謝謝。 – Chong 2013-03-05 00:25:12

回答

3

至於建議由https://stackoverflow.com/users/760746/nobody,一個方法,以確保頭是在源是通過檢查

到veryfy它
info sources 

確保頭文件本身位於源代碼中(在我的情況下,問題在於頭文件名稱中的字母大小寫混在一起,不知何故它通過我的mac書上的編譯)插入斷點在一個頭文件的行中工作得很好。

+0

它的原因在Mac上工作的原因是磁盤被格式化爲不區分大小寫,因此文件名的大小寫沒有任何區別。 – Chong 2013-11-16 10:03:42

1

儘量使用斷點與你的類/方法名是這樣的:

break class::method 
+0

所以我不能直接進入該方法的一行,但必須首先進入方法,然後追蹤到我希望它打破的行?這聽起來...不太方便... – Chong 2013-03-04 18:39:28

+0

我不知道任何其他的可能性,斯里花花公子 – duDE 2013-03-04 18:42:31

+1

我也沒有,這就是爲什麼我問...有時缺乏這個功能真的很不方便... – Chong 2013-03-04 18:52:53