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

How to use gdb on c++ header files?

本文关键字:gdb 文件 c++      更新时间:2023-10-16

我试着在网上搜索这个问题,但似乎我找不到一个好的解决方案。嗯,我正在尝试使用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总是给我一个消息"No source file named TNFmodel.h"。

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

之后
dir ./

问题仍然存在。

有人知道怎么回事吗?如何使用gdb调试头文件?

正如https://stackoverflow.com/users/760746/nobody所建议的那样,一种确保头文件在源文件中的方法是通过检查

来对其进行检查。
info sources

确保头文件本身在源文件中(在我的情况下,问题是头文件名称中的字母大小写混淆了,不知怎么的,它在我的mac上进行了编译),在头文件的行中插入断点工作得很好。

尝试像这样在你的类/方法名后面加上break:

break  class::method

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

例如,将文件CommonLibraryheadersEndian.h更改为COM~2headersEndian.h