【问题标题】:Cannot set Java breakpoint in Intellij IDEA无法在 Intellij IDEA 中设置 Java 断点
【发布时间】:2012-07-20 10:58:04
【问题描述】:

我正在尝试在 GoogleAppEngine 源代码 (SDK 1.7.0) 中设置断点,但 IDEA Ultimate (11.0.2) 一直告诉我 Warning: No executable code found at line 482 in class com.google.appengine.api.memcache.AsyncMemcacheServiceImpl

当我从单元测试运行代码并启动开发服务器时,我都会收到此错误消息。

这很烦人。无论如何,我的源代码位于外部(相对于 IDEA 主目录和项目主目录)目录中,而我的 jar 文件位于 Appengine SDK lib 目录下。

我的 jar 文件作为项目库添加​​到模块中,并且我的源代码附加到该库中。我也在玩模块依赖项,但没有任何运气。最后我决定把这个库放到 Compile 范围内,但这是个坏主意,因为 SDK 在运行时提供了这些 jar,所以我决定退回到 Provided 范围内。

我也玩过模块依赖项选项卡上的导出复选框,但我认为这无关紧要,根据web help,只有当你有依赖模块并且你想让你的库在这些模块中可用时,导出才重要也是。

不管怎样,4 years ago 也出现了这个问题。所以我现在想知道解决这个问题是否真的那么难?

我现在很失望。到目前为止,我对 IDEA 没有任何问题...我也看到了这个问题 arised to other people,所以我猜这不是唯一的。

感谢任何帮助。


由于下面的javap 实验,我编辑了我的问题:类和来源似乎不同步。我从 SVN 中查看了 1.7.0 相关的修订,并且我使用的是 1.7.0 SDK,所以这些应该不会不同步。

【问题讨论】:

    标签: java debugging google-app-engine intellij-idea


    【解决方案1】:

    我发现了一些其他情况,人们报告 IDEA 说“未找到可执行代码”。一个常见的模式是他们试图调试在没有调试信息的情况下构建的代码。检查您是否使用“-g”标志(或等效标志)进行编译。

    【讨论】:

    • 嗯......这听起来合乎逻辑...... :) 我会试着弄清楚它是如何构建的,但因为我不是编译代码的人(它是谷歌)我真的不知道我该怎么做。对此有何建议?
    • 好的...我刚刚找到了与如何查看调试信息是否可用有关的其他答案...您真的是一个乐于助人的人! :) 我试试看。
    • 所以。我尝试了成功反汇编类的javap -v 命令。现在我看到的只是证实了我之前的怀疑。反汇编文件显示LineNumberTable: line 481: 0,这正是我在其中放置断点的方法头的行号(我把它放在下一行)。所以看起来类和源是同步的(这并不奇怪)。
    • 这对我不起作用。事实上,我从来没有在 IDEA 中使用过“-g”标志,而且大多数时候我都能够调试我的代码。
    【解决方案2】:

    我有一个类似的问题,它是由我的 Tomcat 配置中的错误引起的,在“部署”选项卡下,“在服务器启动时部署”。我不小心把它改成了一个非常相似的项目,“:war exploded”。当我把它改回来时,它工作得很好。

    【讨论】:

      【解决方案3】:

      我遇到了类似的问题,并且已经进行了各种尝试。以下是我通常的步骤:

      1. 如果您使用 Maven 依赖项,请转到 Maven 项目 -> 刷新
      2. 如果这不起作用,请尝试顶部菜单 --> 构建 --> 重建项目
      3. 如果还是不行,试试顶部菜单 --> 文件 --> 使缓存无效/重启
      4. 如果仍然不起作用,则 $CATALINA_BASE/bin/catalina.sh 停止,然后启动

      在此之后,通常它涵盖了 99% 的问题。否则,可能您将不得不检查其他一些可能性。

      【讨论】:

      • 有没有办法在不删除本地历史记录的情况下使缓存失效?
      • 从任务管理器中终止服务器在我的情况下解决了它。似乎 intellij 不能总是成功终止我的服务器
      • 我尝试了 Intellilj 的所有步骤,但没有成功。最后,我尝试从命令行运行 -> mvn clean install 并解决了问题
      【解决方案4】:

      请确保您没有运行 Proguard。它帮助了我。

      【讨论】:

      • 这看起来更像是一条评论。
      【解决方案5】:

      我在 intellij 中调试时遇到了类似的问题。我无法在其中一个代码 sn-p 处放置断点,然后我更改了代码的行号,之后我能够放置断点。看起来像是 intellij 中的错误或某些缓存问题。

      【讨论】:

      • 我的情况一模一样 :( 换行的时候可以放断点!
      【解决方案6】:

      菜单 --> 文件 --> 使缓存无效/重新启动

      这在 IntelliJ 13.0.2 下对我有用

      【讨论】:

      • 这为我修好了。
      【解决方案7】:

      如果您使用某些服务器,它们将进入“低内存模式”,这意味着无论您使哪些选项或缓存无效,它们都不会为您调试。

      您应该停止服务器,增加传递给 java 的选项的内存设置,然后重新启动服务器。检查日志以确保您没有收到诸如“以低内存模式运行”之类的报告。

      【讨论】:

        【解决方案8】:

        有同样的问题,发现服务器上的代码版本和我正在调试的代码版本不同。同步代码后问题就解决了。

        【讨论】:

          【解决方案9】:

          就我而言,我杀死了设备上所有正在运行的进程,然后断开连接并重新连接。

          【讨论】:

            【解决方案10】:

            这个问题相当老了,但我认为我的经验可能会在未来对某人有所帮助。就我而言,我试图调试未使用调试信息编译的代码。我正在使用 maven,其中修改前的原始父 pom 文件在构建部分中如下所示。

            <build>
                <pluginManagement>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>2.1</version>
                        <configuration>
                          <target>${javaCompilerVersion}</target>
                          <source>${javaCompilerVersion}</source>
                          <encoding>UTF-8</encoding>
                        </configuration>
                    </plugin>
                    <!--More plugins...-->
                 </pluginManagement>
            </build>
            

            我将上面的部分更改为如下所示。

            <build>
                <pluginManagement>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>2.1</version>
                        <configuration>
                          <target>${javaCompilerVersion}</target>
                          <source>${javaCompilerVersion}</source>
                          <encoding>UTF-8</encoding>
                          <debug>true</debug>
                          <debuglevel>lines,vars,source</debuglevel>
                        </configuration>
                    </plugin>
                    <!--More plugins...-->
                 </pluginManagement>
            </build>
            

            注意添加的&lt;debug&gt;&lt;debuglevel&gt; 元素。 debuglevel 元素可以采用逗号分隔的三个参数的任意组合。

            在编译完这个改动后,我终于设法在 IDEA 中设置了断点。

            【讨论】:

              【解决方案11】:

              问题的本质是 JVM 执行的类文件(简单类或从类路径从 jar 加载的类)与调试器使用的源不匹配。 一旦理解了这一点,解决方案就很简单:确保源代表正在执行的类。 因此,要解决此问题,您可以将源刷新同步到类等。

              【讨论】:

                【解决方案12】:

                在我的案例 Tomcat 中使用调试配置时我遇到了同样的问题。 我尝试了以上所有,但没有。 当我刚刚重新配置Tomcat(调试>编辑配置>删除tomcat>从头开始重新添加它)它终于工作了:)

                【讨论】:

                  【解决方案13】:

                  我能够通过重新编译有问题的类来解决这个问题: 构建 -> 重新编译(filename.java)

                  【讨论】:

                  • 这解决了我的问题。我正在使用另一个 maven 项目,其中包含我想要调试的代码作为我的主 Spring 项目的依赖项。由于需要调试的代码不是直接执行,而是作为另一个项目的依赖项,因此这会导致调试出现一些问题。使用我的断点重新编译 java 文件后,它按预期运行,无需再次重新启动主项目!
                  【解决方案14】:

                  检查您的磁盘空间并释放一些内存。如果您的磁盘空间不足,即使您的服务器未处于“低内存模式”,intelliJ 也不会分配空间来缓存调试所需的类。因此,它不允许您设置断点。

                  【讨论】:

                    【解决方案15】:

                    我正在开发一个 Intellij 插件,当 Intellij 沙盒弹出时,最终解决了我的问题是,一旦沙盒 intellij 弹出,我就从那里重建。

                    之后我构建了我的 Intellij 和沙盒 Intellij,它们最终同步了。

                    【讨论】:

                      【解决方案16】:

                      我有同样的问题。我不知道为什么,但对我来说帮助添加了代码中的任何修改,例如添加或删除注释。奇怪,但它解决了我的问题

                      【讨论】:

                        【解决方案17】:

                        在我的情况下,我是 远程调试,发现远程服务器上的代码版本和 Intellij 不同步。我在本地重新构建了最新代码,在远程服务器上进行了相同的更改,它对我有用。
                        您可以尝试更多可能针对 JetBrains 建议的问题的解决方案。 Impossible to debug "Warning: no executable code found at line."

                        【讨论】:

                          【解决方案18】:

                          只需停止调试过程并重新启动即可。就我而言,就这么简单。

                          【讨论】:

                            猜你喜欢
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2012-05-23
                            • 1970-01-01
                            • 1970-01-01
                            • 2014-07-02
                            • 1970-01-01
                            相关资源
                            最近更新 更多