我在寫一個應用程序,通過拋出異常從錯誤中恢復。嵌入GDB斷點
但是,在調試時,我希望我的調試器在拋出異常之前停止在我的錯誤點。無論如何添加一些代碼會導致GDB用一段代碼中斷執行。
我對ARM和x86體系結構感興趣,有些東西可以跨平臺使用。
編輯:我正在尋找一些斷點指令或一個包裝一個宏。
我在寫一個應用程序,通過拋出異常從錯誤中恢復。嵌入GDB斷點
但是,在調試時,我希望我的調試器在拋出異常之前停止在我的錯誤點。無論如何添加一些代碼會導致GDB用一段代碼中斷執行。
我對ARM和x86體系結構感興趣,有些東西可以跨平臺使用。
編輯:我正在尋找一些斷點指令或一個包裝一個宏。
您可以在代碼中添加「斷點指令」。如果沒有附加調試器,我知道的大多數操作系統都會忽略斷點。
這是編譯器和處理器依賴你使用這個指令是什麼,但在大多數編譯器有一個「內在」或「內置」的功能,如DebugBreak();
爲MS編譯器和__builtin_trap();
GCC和相關的。
編輯:__builtin_trap();
是一個壞主意,因爲它會阻止代碼進一步運行。相反,使用內聯彙編:
inline void DebugBreak()
{
#if defined(X86)
__asm__ __volatile__("int 3");
#elif defined(ARM)
__asm__ __volatile__("bkpt");
#else
#error DebugBreak not defined for this architecture or no architecture defined.
#endif
}
應該用於x86 &手臂工作 - 你可能想爲架構選擇宏「更好」的名字 - 我沒有做太多的工作有不同的架構,所以我的天堂」記住確切的名字是什麼。
你在問:「有沒有什麼方法可以預測GDB會拋出一個異常,並在CPU執行另一條指令之前在中斷處抽出」。我認爲你知道答案雖然;) – mah
你是否在每次達到特定代碼時添加了「如果我到達這裏,休息」的東西? –
@Mats,這就是我要求的 – doron