Eclipse-调试器不会在断点处停止


96

我正在尝试拍摄JUnit。在源代码中,我在两个位置设置了断点:1)在初始化静态成员的行中2)在一个测试用例的第一行中。

调试器在静态字段初始化行中停止。但这并不会在测试用例中停止。无论我在测试用例中的何处设置断点,调试器都不会在那里停下来。我肯定知道测试用例已执行,因为我可以看到添加的日志消息出现在日志中。

任何帮助将不胜感激。

我正在使用Eclipse Galileo和JUnit4启动器。


1
使用-g选项编译的代码是否已打开,以在.class文件中生成调试信息?当然,这是必需的。
duffymo

是的,它使用-g选项进行编译。
罗伊,

您还可以添加有关您正在使用哪个版本的JUnit和JRE的信息吗?我认为在这种情况下会有所帮助。
Vineet Reynolds

顺便说一句,正在使用的JDK更为重要(有些混乱的JDK可能导致这种情况)。请忽略有关JUnit版本的查询。
Vineet Reynolds,

对不起,我应该包括在内。JDK 1.6更新14.
Roy

Answers:


39

如JDK 6 update 15的发行说明中所述,这可能与JDK 6 Update 14中的错误之一有关。

如果确实确实是问题所在,则应移至JDK的更高版本(但这不保证,因为已针对6u16、6u18和7b1发布了修复程序)。最好的选择是使用-XX:+ UseParallelGC标志。增加最小和最大堆大小的大小,以延迟第一个GC,带来暂时的缓解。

顺便说一下,请在Eclipse中使用此错误报告来跟踪其他人的状况。


1
我已升级到JDK 1.6 Update16。现在它在我设置的所有断点处停止。非常感谢你的帮助。
罗伊

别客气。尽管有u15的发行说明,但u16似乎已在很大程度上修复了该发行版。
Vineet Reynolds

谢谢@Vineet-我正在用一根头发拔头发:-)
Jim Garrison

@VineetReynolds:我已经看到您关于Jboss和Java ee 6的有价值的答案了。您能帮我解决这个问题吗?stackoverflow.com/questions/28954323/...
头脑风暴

96

修复可能很简单,只需单击“运行/跳过所有断点”即可。为我工作。


3
我花了三天的时间发现我以某种方式单击了它
henry 2013年

1
谢谢...必须不小心以某种方式单击了该工具栏图标:-P
kenyee

4
谢谢...不知道何时单击
njfife

1
非常感谢。对于其他用户,在这种情况下,如果您创建断点,它将显示为斜线。
saurabheights '16

我也一样 我从未点击过它!版本:火星发布(4.5.0)构建ID:20150621-1200
Beezer

52

如果适用于您的情况,请确保在“运行”>“调试配置”下,选择了“在主机中停止”。


1
发布之前,请务必阅读以前的回复。问题是他们的jvm版本..并在三年前解决。除非您的回答做出了重要的贡献,否则最好不要恢复旧的线程,以前的答案中没有提到。
Leigh 2012年

6
谢谢。@答案你的答案解决了我的问题。奇怪的是,没有设置“ Stop in main”。
Yu Shen

25
看来他的回答确实做出了重要的贡献,而以前的回答还没有涉及:)
scubbo 2013年

请注意,这是Java应用程序的选项,而不是Android应用程序的选项。
Noumenon

21

通常,这在我身上发生(很少见,但确实如此)意味着正在执行的代码与编辑器中的代码不同。对于Eclipse,构建的类和编辑器中的代码有时会不同步。发生这种情况时,我会得到各种奇怪的调试器行为(调试空行,跳过代码行等)。

重新启动Eclipse,清理所有项目并重建所有内容,通常可以清除一切。我也有Maven插件(较早的版本……暂时没有),也倾向于这样做。

否则可能是一个错误,也许是Vineet所说的,

希望这可以帮助


是的,您所说的情况发生在不会自动重新编译代码的IDE中。发现Oracle JDeveloper(根据个人经验)和较小程度的需求(Netbeans)。
Vineet Reynolds

1
好建议。说的还不够。有时,我们会过分考虑问题,这只是系统不同步。例如重启计算机以解决简单问题。
Xonatron 2012年

谢谢,这就是我的问题。这听起来很愚蠢,但是在构建后进行简单的清理和F5即可完成这项工作。
jfajunior

20

您可能不小心跳过了Eclipse工具栏中的所有断点。要解决此问题,请转至Eclipse-> Run-> Skip All Breakpoints。


1
Arggh,这也有一个快捷方式,我很可能没有偶然检查菜单项,但是我很可能已经按了Ctrl + Alt + B。不管怎么说,多谢拉。
Patru

3

项目-> Clean似乎在JRE 8上对我有用


2

为了使用远程调试器,必须将java .class文件与调试信息一起编译。如果将“ -g:none ”选项传递给编译器,则该类文件将没有必要的信息,因此调试器将无法将源代码上的断点与远程该类进行匹配。同时,如果混淆了 jars / class文件,那么它们也将没有任何调试信息。根据您的回复,很可能不是您的情况,但是此信息对于面临相同问题的其他人可能很有用。


2

就我而言,问题是我没有在“调试”透视图中打开“调试”视图,因此:

1-确保已打开调试透视图:

蚀调试器不起作用1

2-确保已打开调试视图:

蚀调试器不起作用2



1

对于JDK7,请运行->调试配置,选中“调试时在测试运行后保持JUnit运行”。


1

一次,当我取消选中“运行>自动生成”并忘记重新选中它时,发生了一次。


1

确保在顶部声明包装。在我的常规代码中,这在断点处停止:

package Pkg1

import java.awt.event.ItemEvent;

isMule = false

class LineItem {
    // Structure defining individual DB rows
    public String ACCOUNT_CODE
    public String ACCOUNT_DESC
...

这不会在断点处停止:

import java.awt.event.ItemEvent;

isMule = false

class LineItem {
    // Structure defining individual DB rows
    public String ACCOUNT_CODE
    public String ACCOUNT_DESC
...

经过很多努力后,这解决了我的问题。感谢+1
费德里科广场

0

要删除断点

  1. 将调试作为junit测试
  2. 当调试器停止时,单击“变量”和“表达式”旁边的“断点”选项卡
  3. 在断点选项卡的右上角,单击带有两个“ X”的按钮
  4. 停止测试,更换断点,然后再次运行调试器

0

还要验证其他行上的断点是否确实起作用,这可能是调试器中的错误。我在Eclipse调试器中遇到了一个问题,在该代码的下一行上放置一个布尔值赋值的断点不起作用,我在这里报告了这一点,但是在上一行或下一行上做了了。


0

如果没有任何效果,

  1. 删除该远程/本地调试配置,然后创建一个新的。
  2. 在调试配置中添加源。

0

另一个可能的问题是调试器端口可能被防火墙阻止。例如,我正在使用mule anypoint studio(v 5.4.3)。默认调试器端口为6666。执行流时,它不会在断点处停止。当我将端口更改为另一个端口(例如8099)时,它工作正常。


0

转到Right click->Debug Configuration检查是否创建了太多调试实例。当我从配置中删除多个调试实例并重新开始调试时,我的问题已解决。


0

如果您使用的是Eclipse,

右键单击“ Package Explorer”下的项目文件夹。

转到源->清理并选择您的项目。

这将清除所有混乱,并且您的断点现在应该可以工作。



0

就我而言,我在同一工作区中有多个项目。我尝试调试的Java文件存在于多个具有相同程序包的项目中。

我不需要其他项目,因此只需关闭不相关的项目(或从不相关的项目中删除文件)。


0

关于Vineet Reynolds答案的另一条评论。

我发现我必须设置-XX:+UseParallelGCeclipse.ini

我按如下所示设置虚拟机(vm)参数

-vmargs
-Dosgi.requiredJavaVersion=1.7
-Xms512m
-Xmx1024m
-XX:+UseParallelGC
-XX:PermSize=256M
-XX:MaxPermSize=512M

解决了这个问题。


-2

这对我有效:

我必须将本地服务器地址放入PHP Server配置中,如下所示:

在此处输入图片说明

注意:该地址是我在Apache .conf文件中配置的地址。

注意:唯一有效的断点是“第一行中断”,此后,断点不起作用。

注意:在php.ini文件中检查xdebug属性,并删除所有您认为不需要的属性。


1
我看不到这如何回答问题(关于JUnit和Java调试)
Newtopian
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.