Eclipse - 调试器不会在断点处停止
Posted
技术标签:
【中文标题】Eclipse - 调试器不会在断点处停止【英文标题】:Eclipse - debugger doesn't stop at breakpoint 【发布时间】:2010-11-25 03:30:35 【问题描述】:我正在尝试对 JUnit 进行故障排除。在源代码中,我在两个地方设置了断点:1) 在初始化静态成员的行中 2) 一个测试用例的第一行。
调试器在静态字段初始化行停止。但它并不止于测试用例。无论我在测试用例中的何处设置断点,调试器都不会停在那里。我确定测试用例已执行,因为我可以看到我添加的日志消息出现在日志中。
任何帮助将不胜感激。
我正在使用 Eclipse Galileo 和 JUnit4 启动器。
【问题讨论】:
您的代码编译时是否打开了-g选项以在.class文件中生成调试信息?当然,这是必需的。 是的,它是用 -g 选项编译的。 您还可以添加有关您正在使用的 JUnit 版本和 JRE 的信息吗?我相信这在这种情况下很有帮助。 顺便说一句,使用中的 JDK 更为重要(有一些混乱的 JDK 可能会导致这种情况)。请忽略有关JUnit版本的查询。 对不起,我应该把它包括在内。 JDK 1.6 更新 14. 【参考方案1】:修复可以像单击运行/跳过所有断点一样简单。为我工作。
【讨论】:
我花了三天时间才发现我点击了那个 谢谢...一定是不小心点击了那个工具栏图标:-P 谢谢...不知道什么时候被点击 非常感谢。对于其他用户,在这种情况下,如果您设置断点,它将显示为斜线。 同样的事情发生在我身上。我从来没有点击它...!版本:Mars 发布 (4.5.0) 内部版本号:20150621-1200【参考方案2】:确保在 Run > Debug Configurations 下选择“Stop in main”(如果适用于您的情况)。
【讨论】:
发帖前请务必阅读之前的回复。问题是他们的jvm版本..三年前就解决了。最好不要恢复旧线程,除非您的回复有重要意义,而以前的答案中没有涵盖。 谢谢。 @Answerer 你的回答解决了我的问题。奇怪的是“Stop in main”没有设置。 看来他的回答确实贡献了一些重要的东西,而以前的回答中没有提到:) 注意,这是 Java 应用程序的一个选项,而不是 android 应用程序。【参考方案3】:这可能与JDK 6 Update 14, as indicated in the release notes for JDK 6 update 15 中的错误之一有关。
如果这确实是问题所在,您应该迁移到更高版本的 JDK(不过这并不能保证,因为 fixes have been released against 6u16, 6u18 and 7b1)。最好的办法是使用 -XX:+UseParallelGC 标志。增加最小和最大堆大小的大小,以延迟第一次 GC,带来暂时的缓解。
顺便说一句,使用this bug report in Eclipse 跟踪其他人的情况。
【讨论】:
我升级到 JDK 1.6 更新 16。现在它在我设置的所有断点处停止。非常感谢您的帮助。 不客气。尽管有 u15 的发行说明,但 u16 似乎是已将其修复到足够好的程度的版本。 谢谢@Vineet - 我正在把头发拉到这个上:-) @VineetReynolds:我看到你的宝贵答案与 Jboss 和 Java ee 6 有关。你能帮我解决这个问题吗? ***.com/questions/28954323/…【参考方案4】:您可能不小心跳过了 Eclipse 工具栏中的所有断点。要解决此问题,请转到 Eclipse -> 运行 -> 跳过所有断点。
【讨论】:
Arggh,这也有一个快捷方式,我很可能没有意外检查菜单项,但我很可能是按了 Ctrl+Alt+B。无论如何,谢谢。【参考方案5】:通常当这种情况发生在我身上时(很少见,但确实如此)意味着正在执行的代码与编辑器中的代码不同。 Eclipse 会不时发生构建的类和编辑器中的代码不同步的情况。发生这种情况时,我会得到各种奇怪的调试器行为(调试空行、跳过代码行等)。
重新启动 Eclipse,清理所有项目并重建所有内容通常会清除所有问题。我也有倾向于这样做的 Maven 插件(旧版本......现在已经有一段时间没有了)。
否则它可能是一个错误,也许是 Vineet 所说的,
希望对你有帮助
【讨论】:
是的,您所说的更多发生在不会自动重新编译代码的 IDE 中。 Oracle JDeveloper(根据个人经验)和在较小程度上(Netbeans)被发现缺乏。 好建议。说的不够。有时我们过度思考问题,只是系统不同步。例如重新启动计算机以解决简单问题。 谢谢,这就是我的问题。这听起来很愚蠢,但是在构建后一个简单的清理和 F5 就可以完成这项工作。【参考方案6】:Project -> Clean 似乎在 JRE 8 上对我有用
【讨论】:
【参考方案7】:在我的情况下,问题是我没有在 Debug 透视图中打开 Debug 视图,所以:
1 - 确保您已打开调试透视图:
2 - 确保已打开调试视图:
【讨论】:
【参考方案8】:为了使用远程调试器工作,java .class 文件必须与调试信息一起编译。如果将“-g:none”选项传递给编译器,则类文件将没有必要的信息,因此调试器将无法将源代码上的断点与远程中的该类匹配。同时,如果 jars/class 文件被混淆,那么它们也不会有任何调试信息。根据您的回复,很可能不是您的情况,但此信息可能对面临相同问题的其他人有用。
【讨论】:
【参考方案9】:删除所有断点并重新添加。
【讨论】:
这为我解决了问题。诡异的。谢谢【参考方案10】:对于JDK7,run->Debug Configurations,勾选“Keep JUnit running after a test run after debug”。
【讨论】:
【参考方案11】:曾经发生在我身上,当我取消选中“运行 > 自动构建”并忘记重新检查时。
【讨论】:
【参考方案12】:确保在顶部声明包。 在我的 groovy 代码中,这会在断点处停止:
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【参考方案13】:To remove the breakpoints:
-
将您的类作为 junit 测试进行调试
当您的调试器停止时,点击“变量”和“表达式”旁边的“断点”标签
在断点选项卡的右上角,单击带有两个“X”的按钮
停止测试,替换断点并再次运行调试器
【讨论】:
【参考方案14】:还要验证其他行上的断点是否有效,这可能是调试器中的错误。我在使用 Eclipse 调试器时遇到问题,在其代码位于下一行的布尔赋值上设置断点不起作用I reported this here,但将其放在上一行或下一行可以。
【讨论】:
【参考方案15】:如果没有任何效果-
-
删除远程/本地调试配置,并创建一个新配置。
在调试配置中添加源代码。
【讨论】:
【参考方案16】:另一个可能的问题是调试器端口可能被防火墙阻止。例如,我使用 mule anypoint studio (v 5.4.3)。默认调试器端口为 6666。执行流程时,它不会在断点处停止。当我将端口更改为另一个端口(例如 8099)时,它工作正常。
【讨论】:
【参考方案17】:转到Right click->Debug Configuration
并检查是否创建了太多调试实例。
当我从配置中删除多个调试实例并重新开始调试时,我的问题得到了解决。
【讨论】:
【参考方案18】:如果你在 Eclipse 上,
右键单击“Package Explorer”下的项目文件夹。
转到源 -> 清理并选择您的项目。
这将清除所有混乱,您的断点现在应该可以工作了。
【讨论】:
【参考方案19】:创建一个新的工作区对我有用。
【讨论】:
【参考方案20】:就我而言,我在同一个工作区中有多个项目。我尝试调试的 java 文件存在于多个具有相同包的项目中。
我不需要其他项目,所以只需关闭不相关的项目(或从不相关的项目中删除文件)。
【讨论】:
【参考方案21】:关于 Vineet Reynolds 答案的附加评论。
我发现我必须在eclipse.ini
中设置-XX:+UseParallelGC
我如下设置虚拟机 (vm) 参数
-vmargs
-Dosgi.requiredJavaVersion=1.7
-Xms512m
-Xmx1024m
-XX:+UseParallelGC
-XX:PermSize=256M
-XX:MaxPermSize=512M
解决了这个问题。
【讨论】:
【参考方案22】:当我有几个项目时发生在我身上,我意识到我从项目 A 中创建了项目 B 的 spring boot 配置(我单击复制并更改参数以具有项目 B 的配置)并在这种情况下我没有调试模式,所以我删除了这个配置,并通过单击 Spring Boot App 中的新建直接创建了一个新配置
【讨论】:
【参考方案23】:这对我有用:
我必须将我的本地服务器地址放在 php 服务器 配置中,如下所示:
注意:该地址是我在 Apache .conf 文件中配置的地址。
注意:唯一有效的断点是“Break at first line”,之后,断点就失效了。
注意:检查 php.ini 文件中的 xdebug 属性,并删除您认为不需要的任何属性。
【讨论】:
我看不出这是如何回答问题的(关于 JUnit 和 Java 调试)以上是关于Eclipse - 调试器不会在断点处停止的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2010 C# 调试器不会在新断点处停止