无法在Intellij IDEA中设置Java断点

问题描述 投票:48回答:17

我试图将断点放入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文件位于App Engine SDK lib目录下。

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

我还使用了模块依赖项选项卡上的导出复选框,但我认为这是无关紧要的,根据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
17个回答
64
投票

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

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

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


1
投票

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

这在IntelliJ 13.0.2下适用于我


1
投票

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

您应该停止服务器,增加传递给java的选项的内存设置并重新启动服务器。检查日志以确保您不会收到“以低内存模式运行”等报告。


1
投票

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


0
投票

在我的情况下,我杀死了设备上的所有正在运行的进程,并断开连接并重新连接它。


0
投票

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


0
投票

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


0
投票

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

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


-4
投票

重新启动电脑。它解决了我的情况。简单是最好的..


16
投票

我在intellij中调试时遇到了类似的问题。我无法在其中一个代码片段中放置断点,然后我更改了代码的行号,之后我就可以放置断点了。看起来像intellij中的错误或一些缓存问题。


7
投票

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


4
投票

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


3
投票

这个问题相当陈旧,但我认为我的经历可能有助于未来的某些人。在我的情况下,我试图调试未使用调试信息编译的代码。我正在使用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>

请注意添加的<debug><debuglevel>元素。 debuglevel元素可以使用逗号分隔的三个参数的任意组合。

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


2
投票

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


2
投票

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


1
投票

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.