11

我试图在网上搜索这个问题,但似乎我找不到解决我问题的好方法。好吧,我正在尝试使用 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 的源文件”。

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

dir ./

问题依然存在。

所以有人知道怎么了?如何使用 gdb 调试头文件?

4

3 回答 3

5

正如https://stackoverflow.com/users/760746/nobody所建议的,确保标头在源代码中的一种方法是通过检查来验证它

info sources

在确保标头本身位于源中之后(在我的情况下,问题是标头名称中字母的大小写被混淆了,并且不知何故它通过了我的 mac book 上的编译),在 a 行中插入断点头文件工作得很好。

于 2013-03-05T00:34:48.550 回答
2

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

break  class::method
于 2013-03-04T18:34:47.843 回答
1

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

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

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

于 2019-03-11T08:38:10.880 回答