2013-03-04 54 views
8

我试图在网上搜索这个问题,但似乎我找不到解决我的问题的好方法。那么,我试图用gdb来调试我的C++程序。该程序由一个简单的main.cpp和一个model.h组成。而编译命令是如何在C++头文件上使用gdb?

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调试头文件?

+2

是编译时还包含在该位置的头文件吗?也许你可以在输入'info sources'时发布输出gdb。 – Nobody 2013-03-04 18:51:04

+0

哎哟...我查了一下资料,现在看到了这个问题......一封信的情况并不符合。那么,我不知道我是如何通过编译的......但也许这是因为我使用的是mac,有时编译时并不敏感。纠正这种情况后,gdb可以正常工作。谢谢。 – Chong 2013-03-05 00:25:12

回答

3

至于建议由https://stackoverflow.com/users/760746/nobody,一个方法,以确保头是在源是通过检查

到veryfy它
info sources 

确保头文件本身位于源代码中(在我的情况下,问题在于头文件名称中的字母大小写混在一起,不知何故它通过我的mac书上的编译)插入断点在一个头文件的行中工作得很好。

+0

它的原因在Mac上工作的原因是磁盘被格式化为不区分大小写,因此文件名的大小写没有任何区别。 – Chong 2013-11-16 10:03:42

1

尽量使用断点与你的类/方法名是这样的:

break class::method 
+0

所以我不能直接进入该方法的一行,但必须首先进入方法,然后追踪到我希望它打破的行?这听起来...不太方便... – Chong 2013-03-04 18:39:28

+0

我不知道任何其他的可能性,斯里花花公子 – duDE 2013-03-04 18:42:31

+1

我也没有,这就是为什么我问...有时缺乏这个功能真的很不方便... – Chong 2013-03-04 18:52:53