是否可以在條件表達式包含任意類類型的對象的GDB中設置條件斷點?任意類型的GDB條件斷點
我需要在函數中設置一個斷點,條件將檢查對象的成員字符串變量是否等於說「foo」。所以,像這樣:
condition 1 myObject->myStringVar == "foo"
但它不工作。 GDB只允許原始類型和char *類型的條件斷點?有什麼辦法可以在非基元類型上設置條件斷點?
是否可以在條件表達式包含任意類類型的對象的GDB中設置條件斷點?任意類型的GDB條件斷點
我需要在函數中設置一個斷點,條件將檢查對象的成員字符串變量是否等於說「foo」。所以,像這樣:
condition 1 myObject->myStringVar == "foo"
但它不工作。 GDB只允許原始類型和char *類型的條件斷點?有什麼辦法可以在非基元類型上設置條件斷點?
有沒有什麼辦法可以在非原始的 類型上設置條件斷點?
是,做到這一點的一種方法是對非原始類型轉換爲原始的一種,你的情況來char*
,並使用strcmp
比較字符串。
condition 1 strcmp(myObject->myStringVar.c_str(),"foo") == 0
您問的問題的答案是肯定的......在一般情況下,它適用於任意類和函數以及類成員函數。你不會陷入測試原始類型。班級成員重載,如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
在MSVC(實際上不是重複相關/同樣的問題,只是可能是由同一引起問題..):http://stackoverflow.com/questions/1740858/how-to-create-conditional-breakpoint-with-stdstring – HostileFork