2008-10-15 132 views
24

我的問題是,我在我的代碼中設置了一些斷點,其中一些斷點不起作用。在一些地方,它抱怨「未解決的斷點」。爲什麼Eclipse CDT會忽略斷點?

有沒有人有任何線索爲什麼會發生這種情況?順便說一下,我正在使用gdb。

編輯:是的,當然是編譯調試信息。它只發生在代碼中的某些類或點上。我敢肯定,代碼的部分已達到,因爲我可以達到它步進

編輯:理查德的解決方案不工作;不管怎麼說,還是要謝謝你。我在Debug中編譯,沒有任何優化。

+0

您是否在'真實'代碼行上設置斷點?由此,我的意思是可執行代碼,而不是隻包含大括號的行。 – paxdiablo 2008-10-15 11:57:47

+3

這一切都發生在我身上,通常Eclipse CDT的調試器很不可靠 – UncleZeiv 2009-02-12 15:21:33

+0

檢查您的可執行文件是否使用調試信息編譯。 – MysticSlayer 2008-10-15 10:42:08

回答

3

「未解決的斷點」意味着GDB未找到與您試圖設置斷點的文件和行對應的代碼位置。

您是否試圖在構造函數中停止?

如果是這樣,你很可能會看到這個固定的GCC bug

14

難道是你試圖在尚未加載的共享庫中設置斷點?只有在圖書館加載後才能使用。較新的gdb允許設置延遲斷點,但可能尚未(尚未)被CDT支持。解決方法是在一開始可用的地方設置一個斷點,當有問題的共享庫已經被加載時將會到達一個斷點。然後在共享庫中設置另一個斷點。現在它應該工作。這有點乏味,但通常起作用。

GDB documentation

對於一個掛起的斷點,其地址還不知道,這個字段將包含「待定」。這樣的斷點在加載具有由斷點引用的符號或行的共享庫之前不會觸發。

3

有時,優化也會導致跳過點也被跳過。確保你正在編譯-O0

0

我發現使用F8(resume)不會停在我的斷點處。但是,如果我有停止啓動:主集,然後跨過我的代碼(F5/F6),然後我的斷點被擊中。除了-g或-g3之外,我沒有任何特殊的編譯器選項。希望有所幫助...

0

確保斷點類型正確。對於C/C++來說,它是一個小小的藍點。如果看起來像其他任何東西,機會是斷點類型是不正確的。我會嘗試關閉文件,右鍵單擊它 - >打開 - > C/C++編輯器。這對我有效。

9

我發現有時將引用的Process Launcher從「GDB(DSF)創建進程啓動器」切換到「Standard Create Process Launcher」已經解決了我的這個問題。其他時候,只需刪除所有斷點並重新啓動Eclipse即可。

0

你放置一個斷點在模板類/函數?我遇到了同樣的問題:我可以遍歷模板代碼,但斷點不起作用。 我猜Eclipse不明白,它必須放置斷點該類的所有實例:

template <typename T> 
int doit(T a) { 
return a.do(); // <-- breakpoint here 
} 
... 
A a; 
cout << doit(a); 

我認爲它會等待DOIT(...),並從不爲DOIT(...)。 如果我將它設置爲函數'doit',那麼至少gdb本身會在斷點處停止。

0

我和GDB有類似的問題。它似乎是由相同的源代碼文件名引起的,即使它們具有不同的路徑。我重命名了重複項,然後GDB工作得很好。

的Silviu

0

我有同樣的問題,

1.- Removed the breakpoints. 
2.- Restart eclipse 
3.- Clean the project by using project -> clean 
4.- Add again the breakpoints and start your debugging. 

這解決了我的問題。

0

如果您正在使用GDB作爲一個調試器,確保您使用的兩個標誌: -g和-ggdb

您可以編輯make文件直接, FCFLAGS = -g -ggdb(其他一些你可能有的標誌)

或轉到調試配置(當你點擊bug圖標旁邊的小箭頭時,它會在菜單中下拉菜單)。選擇你正在調試的項目,然後點擊調試器選項卡。檢查你使用的是gdb,並在這裏添加標誌。