我有一个C ++对象,它有20个左右的构造函数,我想知道哪个特定的构造函数被调用。
答案 0 :(得分:2)
您可以使用rbreak
。见documentation:
rbreak regex
在与正则表达式匹配的所有函数上设置断点 正则表达式。此命令在所有匹配项上设置无条件断点, 打印它设置的所有断点的列表。一旦这些断点出现了 设置,它们被视为与中断设置的断点一样 命令。您可以删除它们,禁用它们或使它们成为条件 与任何其他断点一样。
示例:
class Foo {
public:
Foo() {}
Foo(int) {}
};
int main() {
Foo f1;
Foo f2(1);
return 0;
}
gdb session:
[ ~]$ gdb -q a.out
Reading symbols from a.out...done.
(gdb) rbreak Foo::Foo
Breakpoint 1 at 0x4004dc: file so-rbr.cpp, line 3.
void Foo::Foo();
Breakpoint 2 at 0x4004eb: file so-rbr.cpp, line 4.
void Foo::Foo(int);
(gdb) i b
Num Type Disp Enb Address What
1 breakpoint keep y 0x00000000004004dc in Foo::Foo() at so-rbr.cpp:3
2 breakpoint keep y 0x00000000004004eb in Foo::Foo(int) at so-rbr.cpp:4
(gdb)
答案 1 :(得分:0)
只需运行break myNamespace::myClass::myClass
,gdb就会在每个构造函数上中断。
例如,如果要中断任何具有至少2个构造函数的runtime_error的创建,则可以运行break std::runtime_error::runtime_error
。 gdb输出将是这样的:
Breakpoint 4 at 0xaf20 (4 locations)
这表明断点设置为多个构造函数。要检查运行info breakpoints
的断点的位置,将提供如下输出:
Num Type Disp Enb Address What
1 breakpoint keep y <MULTIPLE>
1.1 y 0x000000000000af20 <std::runtime_error::runtime_error(char const*)@plt>
1.2 y 0x000000000000b300 <std::runtime_error::runtime_error(std::runtime_error const&)@plt>
1.3 y 0x000000000000b460 <std::runtime_error::runtime_error(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@plt>
1.4 y 0x000000000000b5e0 <std::runtime_error::runtime_error(char const*)@plt>