答案 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-app
,test-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
注意:根据您的客户端系统更改/更新端口
3.一旦完成,新的调试器将被设置[步骤2],在调试模式下运行webapp。
控制台输出: 连接目标VM,地址:'localhost:5005',传输:'socket'
5.configuration 现已连接 - 继续探索您的调试技巧以解决问题:) :)