2012-05-29 69 views
8

是否可以在條件表達式包含任意類類型的對象的GDB中設置條件斷點?任意類型的GDB條件斷點

我需要在函數中設置一個斷點,條件將檢查對象的成員字符串變量是否等於說「foo」。所以,像這樣:

condition 1 myObject->myStringVar == "foo" 

但它不工作。 GDB只允許原始類型和char *類型的條件斷點?有什麼辦法可以在非基元類型上設置條件斷點?

+0

在MSVC(實際上不是重複相關/同樣的問題,只是可能是由同一引起問題..):http://stackoverflow.com/questions/1740858/how-to-create-conditional-breakpoint-with-stdstring – HostileFork

回答

8

有沒有什麼辦法可以在非原始的 類型上設置條件斷點?

是,做到這一點的一種方法是對非原始類型轉換爲原始的一種,你的情況來char*,並使用strcmp比較字符串。

condition 1 strcmp(myObject->myStringVar.c_str(),"foo") == 0 
5

您問的問題的答案是肯定的......在一般情況下,它適用於任意類和函數以及類成員函數。你不會陷入測試原始類型。班級成員重載,如operator==,應該可以工作。

但標準圖書館很瘋狂。我敢打賭,這種情況下,這個問題具有的std :: string是一個全球模板運算符重載operator==做:

http://www.cplusplus.com/reference/string/operators/

因此,聲明是這樣的:

template<class charT, class traits, class Allocator> 
    bool operator==(const basic_string<charT,traits,Allocator>& rhs, 
       const charT* lhs); 

我gdb經常會遇到問題......如果它不知道該怎麼做,我不會感到驚訝!

注意的是,除了@ ks1322說什麼,你可以留在C++領域和更簡單地使用std::string::compare()

condition 1 myObject->myStringVar.compare("foo") == 0