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# 调试器不会在新断点处停止

颤振调试器不会在断点处停止

调试远程节点服务器时,VScode 调试器不会在断点处停止

远程调试不会在断点处停止

Android Studio 的调试器不会在库模块中的断点处停止

调试器不会在 VS Code for Python 中的断点处停止