是否可以在条件表达式包含任意类类型的对象的 GDB 中设置条件断点?
我需要在函数内设置断点,条件将检查对象的成员字符串变量是否等于说“foo”。所以,像:
condition 1 myObject->myStringVar == "foo"
但它不起作用。GDB 是否只允许在原始类型和 char* 类型上设置条件断点?有什么办法可以在非原始类型上设置条件断点?
有什么办法可以在非原始类型上设置条件断点?
是的,一种方法是将非原始类型转换为原始类型,在您的情况下转换为char*
,并用于strcmp
比较字符串。
condition 1 strcmp(myObject->myStringVar.c_str(),"foo") == 0
您提出的问题的答案是肯定的......在一般情况下,它适用于任意类和函数以及类成员函数。您不必拘泥于测试原始类型。类成员重载,如operator==
,应该可以工作。
但我猜这种情况的问题与operator==
for std::string 是全局模板化运算符重载有关:
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