为什么Eclipse CDT会忽略断点?

25

我的问题是我在代码中设置了一些断点,但其中一些断点无法正常工作。有些地方会出现“未解决的断点”的错误提示。

是否有人知道为什么会出现这种情况?顺便说一句,我正在使用gdb调试工具。

编辑:是的,当然编译时加入了调试信息。它只发生在某些类或代码中的某些位置。我非常确定那部分代码已经被执行到了,因为我可以通过单步执行到达它。

编辑:Richard的解决方案不起作用,不过还是谢谢他。我正在使用无优化的Debug编译。


检查您的可执行文件是否编译了调试信息。 - MysticSlayer
你是否在“真实”的代码行上设置断点?我的意思是可执行的代码,而不是仅包含大括号的行。 - paxdiablo
3
这种情况经常发生在我身上;总的来说,Eclipse CDT 的调试器非常不可靠,令人遗憾。 - UncleZeiv
如问题所述,代码是使用调试信息编译的。 - Chandrayya G K
12个回答

15

可能是您试图在尚未加载的共享库中设置断点。在库加载之前,这是不会起作用的。新版本的GDB允许设置延迟断点,但CDT可能尚未支持。一种解决方法是在一开始就能到达并且在问题共享库已经加载时就可以设置其他断点的位置上设置断点。然后再在共享库中设置另一个断点。现在应该可以正常工作。虽然有点麻烦,但通常都有效。

来自GDB文档:

对于地址尚未知晓的待定断点,此字段将包含“PENDING”。这样的断点只有在包含断点引用的符号或行的共享库被加载后才会触发。


10

我发现有时将引用的进程启动器从“GDB(DSF)创建进程启动器”切换到“标准创建进程启动器”可以解决这个问题。其他时候,只需删除所有断点并重新启动Eclipse即可解决问题。


3
"未解决的断点"表示GDB没有找到与您尝试设置断点的文件和行对应的代码位置。
您是否正在尝试在构造函数中停止?
如果是这样,您可能会看到最近修复的GCC 错误

我也遇到了同样的问题,你能帮我吗?谢谢。 - Haider Ali

3
有时候优化会导致断点被跳过,确保你使用-O0编译。

0

令人惊讶的是,对于这个问题有如此多不同的答案。在Eclipse 2019.12、CDT 9.10、RHEL 8.0、x86_64中仍然存在(2020年)一个问题。在我的情况下,我可以通过调整断点属性并将其从“常规”更改为“硬件”来解决它(选择断点窗口,然后右键单击断点,断点属性,常规,类型)。


0

我曾经遇到过GDB类似的问题。看起来是由于相同的源代码文件名引起的,即使它们有不同的路径。我重命名了重复的文件,之后GDB就正常工作了。

Silviu


0

0

如果您正在使用GDB作为调试器,请确保同时使用-g和-ggdb两个标志。

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

或者进入“调试配置”(它在单击错误图标旁边的小箭头时下拉的菜单中)。选择要调试的项目,然后单击调试器选项卡。检查您是否正在使用gdb,并在此处添加标志。


0

我发现使用F8(恢复)不会停在我的断点处。但是,如果我设置了“停止启动:main”,然后逐步执行我的代码(F5 / F6),那么我的断点就会被触发。除了-g或-g3之外,我没有任何特殊的编译器选项。希望这有所帮助...


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接