Debugging IntelliJ中的Grails3调试
在离开Grails几年后,我又开始使用它了。我正在使用IntelliJ 2016.01和Grails 3.1.4。这应该很容易,对吧?一切正常,只是我不能像往常一样从IntelliJ内部启动调试器。在以前的生活中,我将IJ10与grails1.0.5结合使用 通过各种搜索,我发现这种变化起源于Grails2.3,当时由于各种原因,Grails2.3开始以分叉模式运行。在不了解所有技术细节的情况下,我的理解是这样做是出于性能原因。不管怎样,我找到了一个解决办法,但似乎还有很长的路要走。有人知道更好的方法吗?我错过了什么 我创建了一个ant任务来调用grails run app:Debugging IntelliJ中的Grails3调试,debugging,grails,intellij-idea,Debugging,Grails,Intellij Idea,在离开Grails几年后,我又开始使用它了。我正在使用IntelliJ 2016.01和Grails 3.1.4。这应该很容易,对吧?一切正常,只是我不能像往常一样从IntelliJ内部启动调试器。在以前的生活中,我将IJ10与grails1.0.5结合使用 通过各种搜索,我发现这种变化起源于Grails2.3,当时由于各种原因,Grails2.3开始以分叉模式运行。在不了解所有技术细节的情况下,我的理解是这样做是出于性能原因。不管怎样,我找到了一个解决办法,但似乎还有很长的路要走。有人知道更好
<target name="start-debug-grails">
<exec executable="cmd">
<arg value="/c"/>
<arg value="start"/>
<arg value="grails"/>
<arg value="run-app"/>
<arg value="--debug-jvm"/>
</exec>
</target>
几分钟后,cmd窗口更新,显示应用程序处于调试模式:
| Running application...
Listening for transport dt_socket at address: 5005
Grails application running at http://localhost:8080 in environment: development
此时,我可以在端口8080上导航应用程序,没有问题。我可以对代码的某些部分进行更改,例如控制器,它将被编译并立即可用。嗯
我更进一步,添加了stop ant任务(比应该的要难一点),这样我就可以执行这两个任务(如果进程正在运行,则先停止),然后启动:
<target name="stop-debug-grails" depends="-stop-debug-init, -stop-debug-kill"/>
<target name="-stop-debug-init">
<!--check if process is running-->
<exec executable="jps">
<arg value="-l"/>
<redirector outputproperty="process.pid">
<outputfilterchain>
<linecontains>
<contains value="grails"/>
</linecontains>
<replacestring from=" org.grails.cli.GrailsCli"/>
</outputfilterchain>
</redirector>
</exec>
<echo>
${process.pid}
</echo>
<condition property="do.kill">
<not>
<!--checks to make sure pid is non blank before calling kill-process-->
<equals arg1="${process.pid}" arg2="" />
</not>
</condition>
</target>
<target name="-stop-debug-kill" if="do.kill">
<echo>
killing process ${process.pid}
</echo>
<exec executable="taskkill" osfamily="winnt">
<arg value="/F"/>
<arg value="/PID"/>
<arg value="${process.pid}"/>
</exec>
<exec executable="kill" osfamily="unix">
<arg value="-9"/>
<arg value="${process.pid}"/>
</exec>
</target>
${process.pid}
正在终止进程${process.pid}
我必须编辑启动调试grails任务,以等待grails开始侦听端口5005
<!--delay to let the server start-->
<sleep seconds="20"/>
现在,我可以通过单击IntelliJ中远程进程的debug,以我习惯的方式在IntelliJ中进行调试。有人知道更好的处理方法吗?在Grails3中调试非常简单。打开类
应用程序.groovy
并单击Debug.对我有效的方法是使用Debug启动gradle任务启动
使用grails 3.2.3+intellij 2016.2.5重新加载断点和更改效果良好,以防万一,如果您使用@user3718614描述的非常简单的方法,并且您的Web应用程序运行良好,但忽略了断点,则在build.gradle中进行更改: 从 到
对于Grails 3.2.11来说,这很有帮助。Wow。非常感谢你。这是有效的。我不知道我怎么会错过这个,但很高兴知道。谢谢现在,我要从我的项目中删除一些ant任务。您可以进行调试,但如果您对代码的某些部分(如控制器)进行更改,它将不会被编译并立即可用。我得到java.lang.NoClassDefFoundError:groovy/lang/GroovyObject。这在Grails 3.2.6中不适用。使用调试运行gradle bootRun不会
<!--delay to let the server start-->
<sleep seconds="20"/>
bootRun {
jvmArgs = ['-Dspring.output.ansi.enabled=always']
}
bootRun {
jvmArgs('-Dspring.output.ansi.enabled=always')
}