【问题标题】:Eclipse - debugger doesn't stop at breakpointEclipse - 调试器不会在断点处停止
【发布时间】:2010-11-25 03:30:35
【问题描述】:

我正在尝试对 JUnit 进行故障排除。在源代码中,我在两个地方设置了断点:1) 在初始化静态成员的行中 2) 一个测试用例的第一行。

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

任何帮助将不胜感激。

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

【问题讨论】:

  • 您的代码编译时是否打开了-g选项以在.class文件中生成调试信息?当然,这是必需的。
  • 是的,它是用 -g 选项编译的。
  • 您还可以添加有关您正在使用的 JUnit 版本和 JRE 的信息吗?我相信这在这种情况下很有帮助。
  • 顺便说一句,使用中的 JDK 更为重要(有一些混乱的 JDK 可能会导致这种情况)。请忽略有关JUnit版本的查询。
  • 对不起,我应该把它包括在内。 JDK 1.6 更新 14.

标签: java eclipse debugging junit


【解决方案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 有关。你能帮我解决这个问题吗? stackoverflow.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:

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

            【讨论】:

              【解决方案14】:

              还要验证其他行上的断点是否有效,这可能是调试器中的错误。我在使用 Eclipse 调试器时遇到问题,在其代码位于下一行的布尔赋值上设置断点不起作用I reported this here,但将其放在上一行或下一行可以。

              【讨论】:

                【解决方案15】:

                如果没有任何效果-

                1. 删除远程/本地调试配置,并创建一个新配置。
                2. 在调试配置中添加源代码。

                【讨论】:

                  【解决方案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 调试)
                                猜你喜欢
                                • 1970-01-01
                                • 2019-08-16
                                • 2018-07-23
                                • 2023-03-12
                                • 1970-01-01
                                • 2012-02-16
                                • 2015-06-30
                                • 2011-07-14
                                • 2013-09-27
                                相关资源
                                最近更新 更多