繁体   English   中英

如何为C ++在gdb中为operator()设置断点?

[英]How do I set a breakpoint for operator() in gdb for C++?

我在C ++类中有2种方法,如下所示:

 class myClass {
     public:
         void operator()( string myString ) {
             // Some code
         }
         void myMethod() { ... }
 }

对于常规方法,我可以简单地在GDB中将断点设置为:

b myClass::myMethod

但是,如何为第一种方法设置断点?

更新:

最初答案的建议(b myClass :: operator())不起作用:(

b myClass::operator()
Function "myClass::operator()" not defined.

谢谢!

gdb还将在特定行号处设置断点。 例如b file.cc:45

一样 myClass::operator()(string)是常规方法。

如果您有多个重载的operator()方法(例如const和非const版本),则gdb应该提供设置断点的选择:

http://sunsite.ualberta.ca/Documentation/Gnu/gdb-5.0/html_node/gdb_35.html#SEC35

您可能必须确保实际上已经编译了方法operator()(string)

编辑:

我已经测试了以下文件test.cpp:

#include <string>
#include <iostream>

class myClass {
        public:
        void operator()( int i ) {
                std::cout << "operator()";
        }

        void myMethod() {
                std::cout << "myMethod";
        }
};

int main() {
   myClass c;
   c(1);
   c.myMethod();
   return 0;
}

使用g++ test.cpp -o test编译,运行gdb test (版本GNU gdb 6.3.50-20050815(Apple版本gdb-1344)),键入start ,然后我才能设置断点。

b 'myClass::operator()(string)'

b myClass::operator()

两者都起作用。

某些C ++函数名称可能很难正确输入。 更糟糕的是,gdb的自动补全常常与c ++名称混淆。 我用这个把戏

gdb> break 'myClass::operator()<TAB>

注意函数开头的单引号。 这有助于gdb的自动完成程序。

b myClass::operator()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM