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

ric*_*bbo 41 java debugging grails intellij-idea

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

见图像:http://prntscr.com/1w0owu.

我真的在网上搜索答案.我想做什么?

小智 74

我试过这里提到的都没有成功.唯一有用的信息在这里.

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

grails.project.fork = [
    test: false,
    run: false
]
Run Code Online (Sandbox Code Playgroud)

现在调试在IntelliJ IDEA Ultimate Edition v.12.1.6中可用,只需通过普通的Debug而无需远程调试.在Grails 2.3.1,Java 1.7.0_45,Windows 7 64位上测试.

  • 在Grails 2.5.0和IntelliJ 14.1.4上测试**无法正常工作** (4认同)
  • 在Grails 2.4.0和IntelliJ 13.1.3上测试 - 一切正常!我个人刚评论了上述配置图中的`run`和`test`行. (3认同)
  • 测试Grails 2.3.4和IntelliJ 13以及+1.工作. (2认同)
  • 测试Grails 2.3.8和IntelliJ 13.1.3以及+1工作. (2认同)
  • 这将有效,但你应该知道分叉意味着什么.好文章[这里](http://mrhaki.blogspot.ie/2013/12/grails-goodness-debugging-app-in-forked.html) (2认同)

akn*_*akn 18

试试这个:

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

使用,从控制台运行您的应用程序

grails run-app --debug-fork
Run Code Online (Sandbox Code Playgroud)

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

Listening for transport dt_socket at address: 5005
Run Code Online (Sandbox Code Playgroud)


jac*_*uac 8

由于Grails的2.3,叉形执行几个Grails的命令(例如run-app,test-app)中的溶液引入.如果您只是从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'
Run Code Online (Sandbox Code Playgroud)

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

为了实现这个目标,设定debug: trueBuildConfig.groovyrun的配置grails.project.fork.现在只需从IDEA运行Grails(不要调试),当应用程序准备好提供HTTP请求时,您将在控制台中看到以下行:

Listening for transport dt_socket at address: 5005
Run Code Online (Sandbox Code Playgroud)

这是您要将单独的远程运行配置指向的位置.连接远程调试器后,立即发出HTTP请求并进行调试.

您也可以禁用分叉执行的编译/测试/运行/战争/ Grails的控制台通过设置与命令输入相关联的价值完全命令grails.project.forkfalse.但是,您将失去Grails 2.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 ...
Run Code Online (Sandbox Code Playgroud)

grails.project.fork = [
    war: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, fork ...
    run: false,
Run Code Online (Sandbox Code Playgroud)

优点:

  • 简单易行(继续开发)

缺点:

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

2.涉及的解决方案:调试分叉运行时

这是一个更复杂的解决方案,您可以将调试器附加到正在运行的grails应用程序.在这篇博客文章中有更详细的描述.

在设置之后,您有一个额外的运行配置,允许您以分叉模式启动grails,还有另一个额外的运行配置,允许您调试该分叉模式.问题是您需要启动它们或它不起作用.

优点:

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

缺点:

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

注意事项

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

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


Ed *_*d J 5

其他答案都不适用于 2016 年使用 Intellij 15.0.4 的 Grails 3.x。这对我有用:

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

run-app  --debug-jvm
Run Code Online (Sandbox Code Playgroud)

控制台应该输出:“正在侦听地址为 5005 的传输 dt_socket,Grails 应用程序在环境:开发中在http://localhost:8080上运行”

现在您可以在 Intellij 中添加类型“Remote”的新配置。然后使用默认值启动它。

新的调试控制台窗口应显示:“已连接到目标虚拟机,地址:'localhost:5005',传输:'socket'”

完毕。

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

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

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

重要的提示。当我尝试“只需右键单击该类并直接从 IDE 运行它”时,应用程序确实启动了。但是,我发送到控制器的所有请求都会导致 500 错误,并显示以下消息:“无法解析名称为“grailsDispatcherServlet”的 servlet 中名称为“/myendpoint”的视图。

所以,我又回到了上面的说明。