无法在Intellij IDEA中设置Java断点
我正在尝试将断点放入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
。
当我从unit testing运行代码并启动开发服务器时,我得到这个错误消息。
这是相当annonying。 无论如何,我的来源是在外部(相对于IDEA主页和项目主页)目录,我的jar文件在Appengine SDK lib目录下。
我的jar文件被作为项目库添加到模块,并且我的源文件被附加到这个库。 我也玩模块依赖,但没有任何运气。 最后,我决定把这个库放到编译范围中,但是由于SDK在运行时提供了这些jar,所以我决定退回到提供范围。
我也使用了模块依赖关系选项卡上的导出checkbox,但我认为这是无关紧要的,根据Web帮助 ,导出只有当您拥有从属模块时才重要,并且您也希望在这些模块中使用您的库。
无论如何,这个问题也是在4年前出现的 。 所以我现在想知道是否真的很难解决这个问题?
我现在很失望 到目前为止,我对IDEA没有任何问题…我发现这个问题也出现在其他人身上 ,所以这并不是我想象的唯一。
任何帮助表示赞赏。
我编辑我的问题,由于我的javap
实验如下:看来,类和来源是不同步的。 我从SVN中检出了1.7.0的相关版本,而且我使用的是1.7.0的SDK,所以这些版本不应该不同步。
我也有类似的问题,并且已经应用了各种尝试。 以下是我通常的步骤:
- 如果您使用的是Maven依赖关系,请转到Maven项目 – >刷新
- 如果这不起作用,请尝试顶层菜单 – >生成 – >重build项目
- 如果仍然不起作用,请尝试顶层菜单 – >文件 – >无效caching/重新启动
- 如果仍然不起作用,则停止$ CATALINA_BASE / bin / catalina.sh,然后启动
在此之后,通常它会覆盖99%的问题。 否则,可能你将不得不考虑一些其他的可能性。
我在Intellij有类似的问题。 我没有把断点放在代码片断之一,我改变了代码的行号,然后我能够把断点。 看起来像intellij中的一个bug
我发现一些其他的情况下,人们报告IDEA说“没有find可执行代码”。 一个常见的模式是他们试图debugging没有debugging信息的代码。 检查您是否正在使用“-g”标志(或同等)进行编译。
这个问题是相当古老的,但我认为我的经验可能会帮助未来的人。 在我的情况下,我试图debugging没有与debugging信息编译的代码。 我正在使用maven其中修改之前的原始父pom文件看起来像下面的构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> </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中设置了断点。
我有一个类似的问题,这是由于我的Tomcatconfiguration错误,在部署选项卡下,“在服务器启动部署”。 我不小心把它改成了一个类似“战争爆炸”的项目。 当我改回它,它工作正常。
请确保你没有运行Proguard。 它帮助了我。
菜单 – >文件 – >无效caching/重新启动
这在IntelliJ 13.0.2下工作
如果你正在使用一些服务器,他们将进入“低内存模式”,这意味着他们不会为你debugging,无论你select了什么样的选项或caching。
你应该停止你的服务器,增加传递给java的选项的内存设置并重新启动你的服务器。 检查日志以确保您不会收到诸如“在低内存模式下运行”的报告。
有同样的问题,发现在服务器上的代码和我正在debugging的代码版本是不同的。 同步代码后,问题已解决。
我可以通过重新编译这个类来解决这个问题:Build – > Recompile(filename.java)
在我的情况下,我杀了设备上的所有正在运行的进程,并断开连接并重新连接它。
问题的实质是JVM执行一个类文件(简单的类或从类path的jar中加载的一个类),它不会匹配debugging器使用的源。 一旦理解了这一点,解决scheme很简单:确保源代表正在执行的类。 所以,要解决您可以刷新的问题 – 将源同步到类,等等。
在我的例子Tomcat中,我使用了相同的问题。 我尝试了以上,但没有。 当我刚刚重新configurationTomcat(debugging>编辑configuration>删除tomcat>从头再次添加它)终于工作:)
重新启动您的电脑。 它解决了我的情况。 简单是最好的..
检查您的光盘空间并释放一些内存。 如果磁盘空间不足,即使服务器不处于“低内存模式”,intelliJ也不会分配空间来cachingdebugging所需的类。 因此它不会允许你设置断点。