2011-05-26 38 views
1

我在寫一個有狀態的掃描器,我想爲每個狀態變化都有一個調試符號。如何告訴GCC發出一個由我命名的特定調試符號?

在我的代碼中,我調用了一個宏SETSTATE(ST_xxx)作爲例子,它做了一些令人討厭的事情,但我可以很容易地告訴GCC在那時發出一個基於該名稱ST_xxx的特定調試符號。

我需要做的是在gdb中設置一個斷點。

我想它應該是#pragma什麼的。

如果我只知道...

回答

1

雖然我可能誤解了問題,不斷ST_xxx 怎麼樣讓一個虛擬函數和調用,在SETSTATE, 然後在功能設置斷點?
例如:

void dummy_breakpoint() {} 

#define SETSTATE(st) dummy_breakpoint(); ...usual process... 

設置break dummy_breakpoint.gdbinit可能會幫助一些節省勞動力。

編輯:
如何設置一個觀測點在SETSTATE像下面,和 設定.gdbinitwatch dummy_variable

char dummy_variable; /* global variable */ 

#define SETSTATE(st) ++ dummy_variable; ...usual process... 

然而,這可能使程序的執行速度較慢,如果您 環境不提供硬件觀測點...

+0

你有我的問題,並有一個這樣的虛擬功能也是我的第一個想法。不幸的是,這是不可能的,因爲SETSTATE會在掃描器內部使用(另一個函數),並且它不可能在函數中有函數,是嗎? – Flavius 2011-06-01 06:40:27

+0

嗯...請參閱編輯。 – 2011-06-01 14:09:00

-1

在編譯使用-D ST_xxx

我用這個使調試信息,使用宏。它定義了價值1

+0

我需要完成的是在gdb中設置一個斷點。在這個問題上,這並沒有幫助。 – Flavius 2011-05-26 14:32:12

0

如果你想調試符號作爲一個參照點,你可以使用標籤來創建這些(只要確保它們沒有脫離調試信息,如果未引用),雖然從未使用過使用過的gdb,我不確定它是否會拿起ollydbg這樣的obj掃描/分析標籤。但爲什麼不使用調試陷阱,如msvc的__debugbreak() ?,這裏的東西可能會用於gcc變體:Is there a portable equivalent to DebugBreak()/__debugbreak?

相關問題