是否可以通過編程方式從GCC中分解調試器?以編程方式在GCC中調用調試器
例如我想要的東西是: #define STOP_EXECUTION_HERE ???
哪些放在一些代碼行將強制調試器停在那裏。 有沒有可能? 我發現some solution,但我不能使用它,因爲在我的嵌入式ARM系統上,我沒有signal.h
。
(但我可以使用內聯彙編)。
是否可以通過編程方式從GCC中分解調試器?以編程方式在GCC中調用調試器
例如我想要的東西是: #define STOP_EXECUTION_HERE ???
哪些放在一些代碼行將強制調試器停在那裏。 有沒有可能? 我發現some solution,但我不能使用它,因爲在我的嵌入式ARM系統上,我沒有signal.h
。
(但我可以使用內聯彙編)。
你所試圖做的是叫做software breakpoint
這是很難說的正是不知道如何實際調試。我假設你的嵌入式系統運行gdbstub。有這可怎麼支持的各種可能性:
使用專用BKPT指令
這可能是你的系統和調試器,支持軟件斷點
飼料無效指令CPU在一個標準的方式
gdbstub本來可以放置自己的UNDEF
放置ARM模式處理程序。如果你走這條路線,你必須知道當前的CPU模式(ARM或THUMB),因爲指令大小會有所不同。未定義指令的示例:
ARM: 0xE7F123F4
THUMB: 0xDE56
在運行時CPU模式可以從PC寄存器的最低位中找到。但更簡單的方法是要知道你是怎麼編譯的目標文件,在這裏放置軟件斷點
使用SWI指令
我們這樣做使用RealView ICE的時候。如果您在嵌入式系統上運行某個操作系統,這很可能不適用於您。 SWI通常由OS用於實現系統調用
您可以從GDB運行您的應用程序,並在代碼調用例如abort
。這會在當時停止你的應用程序。不過,我不確定是否可以繼續。
通常,最好的方法是通過設備工具鏈提供的庫函數。
我無法測試它,但一般的解決方案可能是插入ARM BKPT
instruction。它需要一個立即的參數,您的調試器可能會解釋這個參數,並且可能會有奇怪的結果。
如何調試? gdbstub? – 2012-08-07 09:10:05
遠程在Eclipse IDE中 – 2012-08-07 09:34:06
解引用無效地址 – 2012-08-07 09:43:13