IntelliJ IDEA调试器不适用于Grails项目

时间:2013-10-08 12:39:16

标签: java debugging grails intellij-idea

我无法在IntelliJ IDEA中调试我的代码。当调试模式处于活动状态且正在运行时,但断点没有选中表示有效且可停止的断点的“v”。

见图片:

enter image description here

我真的在网上搜索答案。我该怎么办?

12 个答案:

答案 0 :(得分:74)

我已经尝试过这里提到的所有内容都没有成功。 唯一有用的信息是here

实质上,您应该通过将以下内容添加到grails-app/conf/BuildConfig.groovy来禁用分叉执行:

grails.project.fork = [
    test: false,
    run: false
]

现在,IntelliJ IDEA Ultimate Edition v.12.1.6中的调试仅通过普通的Debug进行,无需远程调试。 在Grails 2.3.1,Java 1.7.0_45,Windows 7 64位上进行了测试。

答案 1 :(得分:18)

试试这个:

在想法中,从“运行”按钮旁边的列表中选择 编辑配置 。然后添加 远程 ,选择您的名称并保留默认的远程配置设置。 (港口5005等)

使用

从控制台运行您的应用
grails run-app --debug-fork

在想法中,从列表中选择配置并在控制台显示信息时点击调试按钮:

Listening for transport dt_socket at address: 5005

答案 2 :(得分:8)

自Grails 2.3以来,针对多个Grails命令的分叉执行(例如run-apptest-app)为introduced。 如果您只是从IntelliJ IDEA调试Grails应用程序,则GrailsStarter进程将启动调试选项。 IDEA控制台上的输出将是:

/usr/lib/jvm/default-java/bin/java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:59935,suspend=y,server=n [...] /opt/idea-IU-133.330/lib/idea_rt.jar org.codehaus.groovy.grails.cli.support.GrailsStarter [...] run-app Connected to the target VM, address: '127.0.0.1:59935', transport: 'socket'

应用程序本身将在名为ForkedTomcatServer的单独进程中启动。这是代码运行的地方,也是调试器实际连接的位置。

要完成此操作,请在debug: true BuildConfig.groovy run配置的grails.project.fork中设置Listening for transport dt_socket at address: 5005 。现在只需从IDEA运行Grails(不要调试),当应用程序准备好提供HTTP请求时,您将在控制台中看到以下行:

grails.project.fork

您可以在此处指向单独的remote run configuration。连接远程调试器后,立即发出HTTP请求并进行调试。

您还可以通过将与false中的命令条目关联的值设置为{{1}}来完全禁用分支执行以进行编译/测试/运行/ war / console Grails命令。但是,您将失去Grails 2.3中添加的分叉执行的好处。

答案 3 :(得分:6)

调试grails(2.3+)应用程序可以通过两种方式完成。

<强> 1。简单的解决方案:禁用调试

编辑BuildConfig.groovy:

grails.project.fork = [
    war: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, fork ...
    run: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, fork ...

grails.project.fork = [
    war: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, fork ...
    run: false,

优点:

  • 操作简单(继续开发)

缺点:

  • 这将删除执行运行时代码替换的功能。这意味着如果您更改代码,它将不再自动获取,您将需要重新启动应用程序才能查看更改。这可能非常耗时。

<强> 2。涉及的解决方案:调试分叉运行时

这是一个更复杂的解决方案,您可以将调试器附加到正在运行的grails应用程序。它将更详细地描述in this blog post

设置完成后,你有一个额外的运行配置,允许你以分叉模式启动grails,还有另一个额外的运行配置,允许你调试分叉模式。问题是你需要同时启动它们或者它不起作用。

优点:

  • 您有调试和运行时代码替换
  • 这不会影响在正常模式下启动应用程序。 (即你有额外的选择)

缺点:

  • 设置需要一点时间
  • 在调试模式下启动需要一个更复杂的两步过程(即需要更长时间)

<强>考虑

解决方案2在允许灵活性的意义上大多优越。我个人不经常使用调试,所以只能在正常模式下启动。当我想调试时,我在调试模式下重启。

如果您需要调试并且还需要重新启动,解决方案1会更好。例如,当您在BootStrap.groovy中处理域类或数据库设置时。

答案 4 :(得分:4)

你看到这篇文章了吗?它详细介绍了如何一步一步让我解决问题。

http://mrhaki.blogspot.com/2013/12/grails-goodness-debugging-app-in-forked.html

答案 5 :(得分:4)

2016年的Grails 3.x w / Intellij 15.0.4中没有其他答案对我有用。这对我有用:

使用以下命令在intellij中启动grails:

run-app  --debug-jvm

控制台应输出: &#34;在地址:5005处收听传输dt_socket Grails应用程序在环境中的http://localhost:8080运行:开发&#34;

现在,您可以在Intellij中添加类型的新配置&#34; Remote&#34;。然后以默认值启动它。

新的调试控制台窗口应该写: &#34;连接到目标虚拟机,地址:&#39; localhost:5005&#39;,传输:&#39; socket&#39;&#34;

完成。

对于那些感兴趣的人,有关启动可调试服务器的grails 3.x文档的引用位于第2.8节,runningAndDebuggingAnApplication:

http://grails.github.io/grails-doc/3.1.x/guide/gettingStarted.html#runningAndDebuggingAnApplication

&#34;有几种方法可以执行Application类,如果您使用的是IDE,那么您只需右键单击该类并直接从IDE运行它,这将启动您的Grails应用程序。 这对于调试也很有用,因为您可以直接从IDE进行调试,而无需在命令行中使用run-app --debug-jvm命令时连接远程调试器。&#34;

重要说明。当我尝试&#34;只需右键单击该类并直接从IDE&#34;运行它,该应用就开始了。但是,我发送给控制器的所有请求都会导致500条错误消息:&#34;无法解析名称为&#39; / myendpoint&#39;在名为&#39; grailsDispatcherServlet&#39;。

的servlet中

所以,我恢复了上面的说明。

答案 6 :(得分:3)

这是Grails 3和Idea(2016.1)的一个非常简单的问题。根据其他答案的建议,不再需要编辑任何文件。

由于某种原因,Idea工具栏中的调试图标显示为灰色,因此您只需导航到应用程序入口点(具有启动应用程序的静态void main方法的类),单击其中一个在左侧装订线中运行箭头并选择“调试”选项。

来自JetBrains文档:

https://www.jetbrains.com/help/idea/2016.1/getting-started-with-grails-3.html

  

调试Grails 3应用程序

     

IntelliJ IDEA允许您使用调试Grails 3应用程序   Application.groovy。

     

在“项目”工具窗口中,打开init目录并右键单击   Application.groovy从下拉列表中选择Debug Grails:'name'   grails3_debug_app您也可以使用编辑器开始调试   过程

答案 7 :(得分:1)

只有三个猜测:

尝试运行run-app,而不是run-war,两者都应该有效,但run-war可能无效。

或者:尝试从控制台远程调试:

grails -debug run-app然后在Idea中连接远程调试。

或者,最后的手段:将您的项目降级到以前的Grails版本可能会有效。是的,这真的很烦人。

希望这有帮助。

答案 8 :(得分:1)

我在Mac Os x Lion上使用Intellij最新版Grails 2.3.4进行了测试。

然后我尝试了Igors的建议,它没有分叉模式。

grails.project.fork = [
    test: false,
    run: false
]

请检查详细信息grails documentation

如果你想调试分叉模式,你应该检查以下博客文章解释。

http://blog.jdriven.com/2013/12/grails-goodness-debugging-app-forked-mode/

答案 9 :(得分:0)

这不应该是默认配置,只能由个人选择。做两个配置只是让这个东西在intellij中以调试模式运行是一件非常痛苦的事情。首先,您必须通过在run-app之后添加“--debug-fork”来设置或修改正常运行配置。其次,您必须配置远程调试,同时接受所有默认值。然后你必须运行运行配置,当它运行时,你运行调试配置。太痛苦了。在开发过程中,我更喜欢完全不使用forked选项。时间就是金钱,我没有时间闲逛。请参阅Mr.HAKI关于这样做的解释。 http://blog.jdriven.com/2013/12/grails-goodness-debugging-app-forked-mode/

答案 10 :(得分:0)

结帐this有关调试Grails Forked模式的博客。

答案 11 :(得分:0)

1.terminal --> 命令:run-app --debug-jvm

控制台输出: grails> 运行应用程序 --debug-jvm |正在运行应用程序... 在地址侦听传输 dt_socket:5005

注意:根据您的客户端系统更改/更新端口

  1. 添加调试器[默认为5005端口],“远程JVM调试”,添加新的[Intelli J设置]

3.一旦完成,新的调试器将被设置[步骤2],在调试模式下运行webapp。

控制台输出: 连接目标VM,地址:'localhost:5005',传输:'socket'

  1. Grails[intellij] 在 8080 上嵌入了 tomcat,所以点击“localhost:8080”并点击控制器 [添加切换点的位置]

5.configuration 现已连接 - 继续探索您的调试技巧以解决问题:) :)