2012-08-07 55 views
0

是否可以通過編程方式從GCC中分解調試器?以編程方式在GCC中調用調試器

例如我想要的東西是: #define STOP_EXECUTION_HERE ??? 哪些放在一些代碼行將強制調試器停在那裏。 有沒有可能? 我發現some solution,但我不能使用它,因爲在我的嵌入式ARM系統上,我沒有signal.h

(但我可以使用內聯彙編)。

+0

如何調試? gdbstub? – 2012-08-07 09:10:05

+0

遠程在Eclipse IDE中 – 2012-08-07 09:34:06

+0

解引用無效地址 – 2012-08-07 09:43:13

回答

3

你所試圖做的是叫做software breakpoint

這是很難說的正是不知道如何實際調試。我假設你的嵌入式系統運行gdbstub。有這可怎麼支持的各種可能性:

使用專用BKPT指令

這可能是你的系統和調試器,支持軟件斷點

飼料無效指令CPU在一個標準的方式

gdbstub本來可以放置自己的UNDEF放置ARM模式處理程序。如果你走這條路線,你必須知道當前的CPU模式(ARM或THUMB),因爲指令大小會有所不同。未定義指令的示例:

ARM: 0xE7F123F4 
THUMB: 0xDE56 

在運行時CPU模式可以從PC寄存器的最低位中找到。但更簡單的方法是要知道你是怎麼編譯的目標文件,在這裏放置軟件斷點

使用SWI指令

我們這樣做使用RealView ICE的時候。如果您在嵌入式系統上運行某個操作系統,這很可能不適用於您。 SWI通常由OS用於實現系統調用

0

您可以從GDB運行您的應用程序,並在代碼調用例如abort。這會在當時停止你的應用程序。不過,我不確定是否可以繼續。

2

通常,最好的方法是通過設備工具鏈提供的庫函數。

我無法測試它,但一般的解決方案可能是插入ARM BKPT instruction。它需要一個立即的參數,您的調試器可能會解釋這個參數,並且可能會有奇怪的結果。