我在寫一個有狀態的掃描器,我想爲每個狀態變化都有一個調試符號。如何告訴GCC發出一個由我命名的特定調試符號?
在我的代碼中,我調用了一個宏SETSTATE(ST_xxx)
作爲例子,它做了一些令人討厭的事情,但我可以很容易地告訴GCC在那時發出一個基於該名稱ST_xxx
的特定調試符號。
我需要做的是在gdb中設置一個斷點。
我想它應該是#pragma
什麼的。
如果我只知道...
我在寫一個有狀態的掃描器,我想爲每個狀態變化都有一個調試符號。如何告訴GCC發出一個由我命名的特定調試符號?
在我的代碼中,我調用了一個宏SETSTATE(ST_xxx)
作爲例子,它做了一些令人討厭的事情,但我可以很容易地告訴GCC在那時發出一個基於該名稱ST_xxx
的特定調試符號。
我需要做的是在gdb中設置一個斷點。
我想它應該是#pragma
什麼的。
如果我只知道...
雖然我可能誤解了問題,不斷ST_xxx 怎麼樣讓一個虛擬函數和調用,在SETSTATE
, 然後在功能設置斷點?
例如:
void dummy_breakpoint() {}
#define SETSTATE(st) dummy_breakpoint(); ...usual process...
設置break dummy_breakpoint
在.gdbinit
可能會幫助一些節省勞動力。
編輯:
如何設置一個觀測點在SETSTATE
像下面,和 設定.gdbinit
watch dummy_variable
?
char dummy_variable; /* global variable */
#define SETSTATE(st) ++ dummy_variable; ...usual process...
然而,這可能使程序的執行速度較慢,如果您 環境不提供硬件觀測點...
在編譯使用-D ST_xxx
我用這個使調試信息,使用宏。它定義了價值1
我需要完成的是在gdb中設置一個斷點。在這個問題上,這並沒有幫助。 – Flavius 2011-05-26 14:32:12
如果你想調試符號作爲一個參照點,你可以使用標籤來創建這些(只要確保它們沒有脫離調試信息,如果未引用),雖然從未使用過使用過的gdb,我不確定它是否會拿起ollydbg這樣的obj掃描/分析標籤。但爲什麼不使用調試陷阱,如msvc的__debugbreak()
?,這裏的東西可能會用於gcc變體:Is there a portable equivalent to DebugBreak()/__debugbreak?
你有我的問題,並有一個這樣的虛擬功能也是我的第一個想法。不幸的是,這是不可能的,因爲SETSTATE會在掃描器內部使用(另一個函數),並且它不可能在函數中有函數,是嗎? – Flavius 2011-06-01 06:40:27
嗯...請參閱編輯。 – 2011-06-01 14:09:00