【问题标题】:GDB conditional breakpoint on arbitrary types such as C++ std::string equality任意类型的 GDB 条件断点,例如 C++ std::string 相等
【发布时间】:2012-06-03 19:01:19
【问题描述】:

是否可以在条件表达式包含任意类类型对象的 GDB 中设置条件断点?

我需要在函数中设置断点,条件将检查对象的成员字符串变量是否等于说“foo”。所以,类似:

condition 1 myObject->myStringVar == "foo"

但它不起作用。 GDB 是否只允许在原始类型和 char* 类型上设置条件断点?有什么办法可以在非原始类型上设置条件断点?

【问题讨论】:

标签: c++ linux gdb


【解决方案1】:

您提出的问题的答案是肯定的......在一般情况下,它适用于任意类和函数以及类成员函数。您不必拘泥于测试原始类型。类成员重载,如operator==,应该可以工作。

但我猜这个案例的问题与 operator== 的 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

【讨论】:

    【解决方案2】:

    有什么方法可以在非原始上设置条件断点 类型?

    是的,一种方法是将非原始类型转换为原始类型,在您的情况下为char*,并使用strcmp 来比较字符串。

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

    【讨论】:

      猜你喜欢
      • 2010-12-16
      • 1970-01-01
      • 2021-04-10
      • 2015-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-19
      • 2021-11-14
      相关资源
      最近更新 更多