2017-08-15 51 views
0

我正在嘗試在exim中構建自定義查找,我遵循了文檔和良好的基礎工作,因此我的附加代碼正在編譯和掛接以及被調用。我使用Exim附帶的Makefile來執行構建,並且我在CFLAGS=-g -O0中添加了以確保我有調試符號。在所有斷點處都沒有停止的代碼塊

Codeblocks,gcc,gdb和源代碼都在我的Linux機器上,我使用XMing將X會話導入並導出到Windows桌面,但我不認爲這有任何問題,但值得一提。現在,我的問題是,當我運行帶有斷點的調試器時,C :: B似乎沒有設置,或者gdb忽略了我的代碼中的斷點,但正在擊中我在main函數中的斷點(我添加了一個在退出時,我可以讀取執行輸出並證明它們正在工作)。

我已經確認我的代碼實際上是被調用的,它目前吐出一個錯誤信息,它正在做什麼。如果我在該行上添加斷點,它不會觸發,也不會觸發函數或函數的第一行。

什麼是更奇怪的(對我來說),是以前它工作!它只是在我調整底部C :: B窗格的大小時才停止工作,這導致屏幕的一部分無法呈現(我認爲這是C :: B和XMing的問題,有時我只是得到一個灰色的空白窗口,需要停止並重新啓動C :: B)。所以我退出C :: B,重新啓動它,重新加載我的項目,然後在我的代碼中斷點根本不工作,即使我可以證明代碼正在執行。

此外,如果我手動添加斷點,它按預期工作。我在main的開始處在C :: B中設置了一個斷點。點擊調試,然後發送b mddfind_open(我的函數的名稱)到gdb中,然後按繼續。C :: B在該函數的開始處再次停止。 C :: B如何將斷點傳遞給gdb可能有些不可思議嗎?

更新: 我正在研究的項目是Exim,它將代碼鏈接到構建目錄(由於gcc 2.92.x和extern的IIRC的一些錯誤)。如果我從C :: B中的該位置打開該文件並設置一個斷點,它按預期工作。我懷疑C :: B可能將不正確的引用傳遞給gdb?

任何想法?

+0

所以它是codeblocks問題 –

+0

我認爲這可能是在這種情況下二進制的方式是沒有路徑信息存儲的符號。因此,gdb正在尋找源代碼的錯誤位置。將子路徑添加到源代碼目錄中修復了它。謝謝 – Graeme

+0

它沒有什麼共同的編程。這是一個配置問題。我正在投票關閉 –

回答

0

似乎在這種情況下,我需要指定源文件的源路徑,即使它位於根源路徑中。

本來我有我的GDB源路徑設置爲:

/home/graeme/exim/src 

有問題的代碼存在於src/lookups,所以加入這條道路也解決了這個問題

/home/graeme/exim/src 
/home/graeme/exim/src/lookups 

我認爲這種情況已經出現因爲我構建的代碼最初被編譯成一個靜態庫,然後這個庫被鏈接到主程序本身中。由於這些符號引用位於庫編譯點處的庫源文件的來源。所以在這種情況下,有多個軟件包正在構建,我需要在源路徑中引用它們中的每一個。

相關問題