C++ 如何使用gdb在基类的构造函数处中断?

C++ 如何使用gdb在基类的构造函数处中断?,c++,gdb,breakpoints,C++,Gdb,Breakpoints,我的主要cpp文件如下: class UnifiedDirListQuery : public UnifiedQuery{ public: UnifiedDirListQuery(){ //do something-------------line 12 } } //other code int main( void ){ UnifiedQuery *query = new UnifiedDirListQuery();//-----line 56

我的主要cpp文件如下:

class UnifiedDirListQuery : public UnifiedQuery{
public:
    UnifiedDirListQuery(){
        //do something-------------line 12
    }
}
//other code

int main( void ){
    UnifiedQuery *query = new UnifiedDirListQuery();//-----line 56
    //do something
    delete query;
}
UnifiedQuery
分别在
unified.h
unified.cpp
中声明和定义。在gdb中调试此程序时:

gdb: b 56
gdb: r
gdb: s
节目跳到第12行。如何转到
unified.cpp
并跳转到基类
UnifiedQuery
Ctor
,例如,如果在
unified.cpp:line 25
中定义了该Ctor

更新

对于回答
break UnifiedDirListQuery::UnifiedDirListQuery
,gdb抱怨:

(gdb) b UnifiedDirListQuery::UnifiedDirListQuery
[0] cancel
[1] all
?HERE
?HERE
> 1
Note: breakpoint -1 (disabled) also set at pc 0x0.
Breakpoint 1 at 0x0
Note: breakpoints -1 (disabled) and 1 also set at pc 0x0.
Breakpoint 2 at 0x0
warning: Multiple breakpoints were set.
Use the "delete" command to delete unwanted breakpoints.
(gdb) r
Starting program: /...(the path)/src/base/unified_album_list.cgi
Warning:
Cannot insert breakpoint 1.
Error accessing memory address 0x0: Input/output error.

对于答案
b file:line
,gdb只需忽略它,就可以不停地执行程序。顺便说一句:实际上,ctor的定义在一个名为
unified.h
的文件中,隐式声明为一个内联函数,因为它在头文件中。

break unified.cpp:25
应该做到这一点,例如在第25行中断 特别是如果有多个文件,则必须提供要断开的文件的名称。有关更多信息,请参见

break UnifiedDirListQuery::UnifiedDirListQuery

还要注意,gdb有制表符完成功能,因此您不必键入所有内容。

该类是否存在于任何名称空间中?在gdb中,您需要完全符合资格。另外,您是否尝试过制表符完成(用于重载解决)?哦,如果构造函数是内联的,可能根本不可能在这里中断。尝试调试构建。不,我使用“tab”完成,并且构造函数是内联的,这可能是失败的一个很好的原因。什么是调试构建?调试构建意味着禁用优化并启用调试符号,即使用
-O0-g
(对于gcc)@arne不是默认的吗?@Liam,这取决于您的构建系统。许多IDE已经在默认项目模板中配置了某种优化。因此,如果将
-O0-g
添加到选项中,则会覆盖任何先前的
-O
标志。