Eclipse CDT为什么忽略断点?

时间:2008-10-15 10:40:17

标签: debugging eclipse-cdt breakpoints

我的问题是我在代码中设置了一些断点,其中一些断点不起作用。在某些地方,它抱怨“未解决的断点”。

有没有人知道为什么会这样?顺便说一句,我正在使用gdb。

编辑:是的,当然是使用调试信息编译的。它只发生在代码中的某些类或点上。而且我很确定已经达到了代码的这一部分,因为我可以实现它的步骤

编辑:理查德的解决方案不起作用;不管怎么说,还是要谢谢你。我在Debug中编译,没有任何优化。

12 个答案:

答案 0 :(得分:15)

可能是您尝试在尚未加载的共享库中设置断点。在库加载之前,这将无效。较新的gdb允许设置延迟断点,但CDT可能尚未支持。解决方法是在已加载相关共享库时将从头开始可用的位置设置断点。然后在共享库中设置另一个断点。现在它应该工作。它有点繁琐,但通常都有效。

来自GDB documentation

  

对于尚未知道其地址的待处理断点,此字段将包含“PENDING”。在加载具有断点引用的符号或行的共享库之前,不会触发此类断点。

答案 1 :(得分:10)

我发现有时将引用的Process Launcher从“GDB(DSF)Create Process Launcher”切换到“Standard Create Process Launcher”已经为我解决了这个问题。其他时候,只需删除所有断点并重新启动Eclipse就可以了。

答案 2 :(得分:3)

“未解决的断点”仅表示GDB未找到与您尝试设置断点的文件和行对应的代码位置。

你是想在构造函数中停止吗?

如果是这样,你很可能会看到这个明确的GCC bug

答案 3 :(得分:3)

有时,优化也会导致断点被跳过。确保使用-O0

进行编译

答案 4 :(得分:0)

我发现使用F8(简历)不会在我的断点处停止。但是,如果我有启动时停止:主设置然后跳过我的代码(F5 / F6)然后我的断点被击中。除了-g或-g3之外,我没有任何特殊的编译器选项。希望有帮助...

答案 5 :(得分:0)

确保断点类型正确。对于C / C ++来说,这是一个很小的蓝点。如果它看起来像其他任何东西,可能是断点类型不正确。我会尝试关闭文件,右键单击它 - >打开 - > C / C ++编辑器。这对我有用。

答案 6 :(得分:0)

如果这里的其他答案没有解决您的问题,那么您可能遇到了同样的问题(这是因为有了过时的GDB版本)。任何在Mac上使用GDB的人都可能会这样。

请在此处查看我的问题和答案:

GDB does not break on some lines of code when using multiple source files

答案 7 :(得分:0)

您是否在模板类/函数中放置了断点?我遇到了同样的问题:我可以单步执行模板代码,但断点不起作用。 我想eclipse不明白它必须在该类的所有实例中放置断点:

template <typename T>
int doit(T a) {
 return a.do(); // <-- breakpoint here
}
...
A a;
cout << doit(a);

我认为它会等待doit(...)而不会等待doit(...)。 如果我将它设置为函数:'doit',那么至少gdb本身会在断点处停止。

答案 8 :(得分:0)

我与GDB有类似的问题。它似乎是由相同的源代码文件名引起的,即使它们有不同的路径。我重命名了重复项,之后GDB工作得很好。

西尔维乌

答案 9 :(得分:0)

我有同样的问题,

1.- Removed the breakpoints. 
2.- Restart eclipse 
3.- Clean the project by using project -> clean 
4.- Add again the breakpoints and start your debugging.

这解决了我的问题。

答案 10 :(得分:0)

如果您使用GDB作为调试器,请确保使用两个标志: -g和-ggdb

您可以直接编辑make文件, FCFLAGS = -g -ggdb(你可能还有其他一些标志)

或转到Debug Configuration(当您单击bug图标旁边的小箭头时,它会在菜单中下拉。)选择要调试的项目,然后单击调试器选项卡。检查您是否正在使用gdb,并在此处添加标记。

答案 11 :(得分:0)

令人惊讶的是,这个问题有这么多不同的答案。在Eclipse 2019.12,CDT 9.10,RHEL 8.0,x86_64中仍然存在(2020)问题。就我而言,我可以通过调整断点属性,然后将其从“常规”更改为“硬件”来进行修复(选择断点窗口,然后右键单击该断点,断点属性,常用类型)。