在类上设置断点';文件中的成员函数 (gdb)b断点。cpp:X::X() 找不到名为“breakpoints.cpp:X::X”的命名空间、类、结构或联合的成员 提示:尝试“breakpoints.cpp:X::X()或”breakpoints.cpp:X::X()) (请注意前面的单引号。) 是否在将来加载共享库时使断点挂起?(y或[n])n
关于以下代码:在类上设置断点';文件中的成员函数 (gdb)b断点。cpp:X::X() 找不到名为“breakpoints.cpp:X::X”的命名空间、类、结构或联合的成员 提示:尝试“breakpoints.cpp:X::X()或”breakpoints.cpp:X::X()) (请注意前面的单引号。) 是否在将来加载共享库时使断点挂起?(y或[n])n,gdb,breakpoints,Gdb,Breakpoints,关于以下代码: (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 breakp
(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
#包括
#包括
X类
{
公众:
X()
{
这是设置断点的正确方法
您可能是在错误的可执行文件上尝试了该操作(将breakspoints.cpp放在目录中,并使用g++-g breakpoints.cpp进行编译,然后在a.out可执行文件上使用gdb),与POST不同的代码,可能具有名称空间,或者由于使用过时的gdb版本而偶然发现旧错误。如果为类定义了名称空间,则可能需要指定名称空间。如果不是标准名称空间标准,则需要指定名称空间。
如果正在执行正确的二进制文件,则文件名是可选的。
你可以验证符号是否在可执行文件上通过“NM -C”命令,其中-C处理C++的名称修改。
因此,用一个例子来总结:
如果名称空间为“mySpace”,类为“X”,其成员为“Y”,
那么断点应该与下面的断点类似,
“(gdb)b mySpace::X::Y”也许您需要在不使用文件名的情况下定义断点
#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;
}
我想这只在类是唯一的情况下起作用,因此它应该在名称空间中
注
如果有多个地方可以放置断点,我认为gdb将尝试在所有地方放置断点,因此您将得到如下结果:
break FooNamespace::FooClass::doSomething()
断点1位于0x7fe62f8e744d:文件src/FooClass.cpp,第42行。(2个位置)
(gdb)信息中断
Num Type Disp Enb地址什么
1断点保持y
src/FooClass.cpp:42处FooNamespace::FooClass::doSomething()中的1.1 y 0x00007fe62f8e744d
src/FooClass.cpp:42处FooNamespace::FooClass::doSomething()中的1.2 y 0x00007fe62f8e7c5d
刚刚重新检查了所有内容,我没有发现任何问题。fwiw,我用gdb 7.2和gdb 7.3进行了测试,只有7.3起作用。@matt我想我的gdb版本是7.1:)anisha@linux-dopx:~>gdb-v GNU gdb(gdb)SUSE(7.1-3.12)
在Suse 11.3中,我可以确认matt的陈述。在7.3中有效,但在7.2中无效。这同样适用于rbreak(例如,rbreak X::
)
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