Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在类上设置断点';文件中的成员函数 (gdb)b断点。cpp:X::X() 找不到名为“breakpoints.cpp:X::X”的命名空间、类、结构或联合的成员 提示:尝试“breakpoints.cpp:X::X()或”breakpoints.cpp:X::X()) (请注意前面的单引号。) 是否在将来加载共享库时使断点挂起?(y或[n])n_Gdb_Breakpoints - Fatal编程技术网

在类上设置断点';文件中的成员函数 (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