2008-10-15 135 views
24

我的问题是,我在我的代码中设置了一些断点,其中一些断点不起作用。在一些地方,它抱怨“未解决的断点”。为什么Eclipse CDT会忽略断点?

有没有人有任何线索为什么会发生这种情况?顺便说一下,我正在使用gdb。

编辑:是的,当然是编译调试信息。它只发生在代码中的某些类或点上。我敢肯定,代码的部分已达到,因为我可以达到它步进

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

+0

您是否在'真实'代码行上设置断点?由此,我的意思是可执行代码,而不是只包含大括号的行。 – paxdiablo 2008-10-15 11:57:47

+3

这一切都发生在我身上,通常Eclipse CDT的调试器很不可靠 – UncleZeiv 2009-02-12 15:21:33

+0

检查您的可执行文件是否使用调试信息编译。 – MysticSlayer 2008-10-15 10:42:08

回答

3

“未解决的断点”意味着GDB未找到与您试图设置断点的文件和行对应的代码位置。

您是否试图在构造函数中停止?

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

14

难道是你试图在尚未加载的共享库中设置断点?只有在图书馆加载后才能使用。较新的gdb允许设置延迟断点,但可能尚未(尚未)被CDT支持。解决方法是在一开始可用的地方设置一个断点,当有问题的共享库已经被加载时将会到达一个断点。然后在共享库中设置另一个断点。现在它应该工作。这有点乏味,但通常起作用。

GDB documentation

对于一个挂起的断点,其地址还不知道,这个字段将包含“待定”。这样的断点在加载具有由断点引用的符号或行的共享库之前不会触发。

3

有时,优化也会导致跳过点也被跳过。确保你正在编译-O0

0

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

0

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

9

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

0

你放置一个断点在模板类/函数?我遇到了同样的问题:我可以遍历模板代码,但断点不起作用。 我猜Eclipse不明白,它必须放置断点该类的所有实例:

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

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

0

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

的Silviu

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. 

这解决了我的问题。

0

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

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

或转到调试配置(当你点击bug图标旁边的小箭头时,它会在菜单中下拉菜单)。选择你正在调试的项目,然后点击调试器选项卡。检查你使用的是gdb,并在这里添加标志。