如何在c ++头文件上使用gdb?

时间:2013-03-04 18:31:53

标签: c++ debugging header gdb

我试图在网上搜索这个问题,但似乎我无法找到解决问题的好方法。好吧,我正在尝试使用gdb来调试我的c ++程序。该程序由一个简单的main.cpp和一个model.h组成。编译命令是

g++ -Wall -g -c main.cpp
g++ -Wall -g main.o -o OUTPUT

由于几乎所有算法都存储在model.h中,我需要调试该头文件而不是cpp文件。但是,每当我试图在标题上放置一个断点,如

tbreak model.h:163

gdb总是给我一条消息“没有名为TNFmodel.h的源文件”。

在另一个问题breakpoints in GDB中,我看到了一个解决方案,即通过“dir”将包含标题的文件夹添加到库中。但我的头文件已经在源文件夹中,并在尝试

dir ./

问题仍然存在。

所以有人知道什么是错的吗?如何使用gdb调试头文件?

3 个答案:

答案 0 :(得分:4)

根据https://stackoverflow.com/users/760746/nobody的建议,确保源代码中的标题的一种方法是通过检查

来解决它
info sources

确保标题本身在源中(在我的情况下,问题是标题名称中的字母的情况混淆了,并且它以某种方式通过我的mac书上的编译),插入断点头文件的行正常工作。

答案 1 :(得分:1)

尝试将break与您的类/方法名称一起使用,如下所示:

break  class::method

答案 2 :(得分:0)

我发现的是文件名有时会缩短。使用info sources,我可以找到GCC使用的缩写名称。当我使用缩短的文件名设置断点时,GDB正确设置了断点。

例如,文件CommonLibrary\headers\Endian.h更改为COM~2\headers\Endian.h

这在运行mingw-64的Windows 10上。