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