(gdb) b breakpoints.cpp:X::X()
Can't find member of namespace, class, struct, or union named "breakpoints.cpp:X::X"
Hint: try 'breakpoints.cpp:X::X()<TAB> or 'breakpoints.cpp:X::X()<ESC-?>
(Note leading single quote.)
Make breakpoint pending on future shared library load? (y or [n]) n
以下代码:
#include <stdio.h>
#include <iostream>
class X
{
public:
X ()
{
std :: cout << "\nIn the default constructor";
}
X (int)
{
std :: cout << "\nIn the parameterized constructor";
}
~X () {}
};
int main (int argc, char *argv[])
{
X xObjA;
X xObjB (11);
while (--argc > 0)
{
printf("\n%s ", argv [argc]);
}
std :: cout << std :: endl << std :: endl;
}
文件名是:breakpoints.cpp
我错过了什么意思?
答案 0 :(得分:3)
这是设置断点的正确方法。
你要么在错误的可执行文件上尝试(在目录中放置breakspoints.cpp并使用g ++ -g breakpoints.cpp进行编译,然后在a.out可执行文件上使用gdb),代码与发布的不同,也许有名称空间,或者由于使用了过时的gdb版本,你偶然发现了一个旧的错误。
答案 1 :(得分:1)
也许您需要在没有文件名的情况下定义断点。以下适用于我:
break FooNamespace::FooClass::doSomething()
我想这只适用于类是唯一的,所以它应该在命名空间中。
如果有多个地方可以放置断点,我认为 gdb 会尝试在所有地方放置断点,所以你最终会得到一些东西喜欢以下内容:
Breakpoint 1 at 0x7fe62f8e744d: file src/FooClass.cpp, line 42. (2 locations)
(gdb) info break
Num Type Disp Enb Address What
1 breakpoint keep y <MULTIPLE>
1.1 y 0x00007fe62f8e744d in FooNamespace::FooClass::doSomething() at src/FooClass.cpp:42
1.2 y 0x00007fe62f8e7c5d in FooNamespace::FooClass::doSomething() at src/FooClass.cpp:42
答案 2 :(得分:0)
如果为类定义了命名空间,则可能需要指定命名空间。如果它不是标准命名空间std。 如果您正在执行正确的二进制文件,则文件名是可选的。 您可以验证可执行文件上是否存在该符号。 “nm -C”命令,其中-C处理C ++的名称重整。
所以总结一个例子: 如果命名空间是“mySpace”,而类是“X”,其成员是“Y”, 然后断点应该像下面那个, “(gdb)b mySpace :: X :: Y”