我无法在 IntelliJ IDEA 中调试我的代码。当调试模式处于活动状态并正在运行时,但断点没有检查表示有效且可停止断点的“v”。
看图片:
我真的在网上搜索答案。我应该做些什么?
我已经尝试了这里提到的所有内容,但都没有成功。唯一有用的信息在这里。
本质上,您应该通过将以下内容添加到以下内容来禁用分叉执行grails-app/conf/BuildConfig.groovy
:
grails.project.fork = [
test: false,
run: false
]
现在可以在 IntelliJ IDEA Ultimate Edition v.12.1.6 中进行调试,只需普通调试即可,无需远程调试。在 Grails 2.3.1、Java 1.7.0_45、Windows 7 64 位上测试。
尝试这个:
在想法中,从“运行”按钮旁边的列表中选择编辑配置。然后添加Remote,选择您的姓名并保留默认的远程配置设置。(端口 5005 等)
使用从控制台运行您的应用程序
grails run-app --debug-fork
在想法中,从列表中选择您的配置并在控制台显示信息时点击调试按钮:
Listening for transport dt_socket at address: 5005
从 Grails 2.3 开始,引入了多个 Grails 命令(例如)的分叉执行。如果您只是从 IntelliJ IDEA 调试 Grails 应用程序,该过程将在调试选项打开的情况下启动。IDEA 控制台上的输出将是:run-app
test-app
GrailsStarter
/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
在. 现在只需从 IDEA 运行 Grails(不要调试),当应用程序准备好服务 HTTP 请求时,您将在控制台中看到以下行:BuildConfig.groovy
run
grails.project.fork
Listening for transport dt_socket at address: 5005
这是您想要将单独的远程运行配置定向到的位置。一旦你的远程调试器连接,发出一个 HTTP 请求,调试就可以工作了。
您还可以完全禁用 compile/test/run/war/console Grails 命令的分叉执行,方法是将与命令条目关联的值设置grails.project.fork
为false
. 但是,您将失去 Grails 2.3 中添加的分叉执行的好处。
可以通过两种方式调试 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 应用程序。在这篇博文中有更详细的描述。
设置后,您有一个额外的运行配置,允许您在分叉模式下启动 grails,还有另一个额外的运行配置,允许您调试该分叉模式。问题是您需要同时启动两者,否则它不起作用。
优点:
缺点:
注意事项
解决方案 2 的优势在于它允许灵活性。我个人不经常使用debug,所以就在正常模式下启动。当我想调试时,我以调试模式重新启动。
如果您需要调试并且还需要重新启动很多,则解决方案 1 会更好。例如,当您在 BootStrap.groovy 中处理域类或数据库设置时。
你看到这篇文章了吗?它详细介绍了如何逐步解决问题。
http://mrhaki.blogspot.com/2013/12/grails-goodness-debugging-app-in-forked.html
在 2016 年使用 Intellij 15.0.4 的 Grails 3.x 上,其他答案都不适用于我。这对我有用:
使用以下命令在 intellij 中启动 grails:
run-app --debug-jvm
控制台应输出:“在地址监听传输 dt_socket:5005 Grails 应用程序在环境中运行在http://localhost:8080:开发”
现在,您可以在 Intellij 中添加类型为“Remote”的新配置。然后使用它的默认值启动它。
并且新的调试控制台窗口应该写:“已连接到目标 VM,地址:'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' 的视图。
所以,我恢复到上面的说明。
这对于 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 允许您使用 Application.groovy 调试 Grails 3 应用程序。
在 Project 工具窗口中,打开 init 目录并右键单击 Application.groovy 从下拉列表中选择 Debug Grails:'name' grails3_debug_app 也可以使用编辑器启动调试过程。
我在 Mac Os x Lion 上使用最新的 Grails 2.3.4 测试了 intellij。
然后我尝试了 Igors 的建议,它在没有分叉模式的情况下工作。
grails.project.fork = [
test: false,
run: false
]
请查看详细的grails 文档
如果你想调试分叉模式,你应该检查以下博客文章的解释非常好。
http://blog.jdriven.com/2013/12/grails-goodness-debugging-app-forked-mode/
只是三个猜测:
尝试运行run-app
,不run-war
,两者都应该工作,但可能run-war
只是不工作。
或者:尝试从控制台远程调试:
grails -debug run-app
然后在 Idea 中连接 Remote Debug。
或者,最后的手段:将您的项目降级到以前的 Grails 版本可能会奏效。是的,这真的很烦人。
希望这可以帮助。
这不应该是默认配置,只能由个人选择。做两个配置只是让这个东西在 intellij 中以调试模式运行是一件非常痛苦的事情。首先,您必须通过在 run-app 后添加“--debug-fork”来设置或修改正常运行配置。其次,您必须配置远程调试,同时接受所有默认值。然后你必须运行运行配置,当它运行时,你运行调试配置。多么痛苦。我更喜欢在开发时完全取消没有分叉选项的运行。时间就是金钱,我没有时间胡闹。请参阅 Mr.HAKI 对此的解释。http://blog.jdriven.com/2013/12/grails-goodness-debugging-app-forked-mode/
查看有关调试 Grails 分叉模式的博客。
1.终端 --> 命令:运行应用程序 --debug-jvm
控制台输出:grails> run-app --debug-jvm | 正在运行应用程序...在地址:5005 处侦听传输 dt_socket
注意:根据您的客户端系统更改/更新端口
3.完成后,将设置新的调试器 [步骤 2],在调试模式下运行 webapp。
控制台输出:连接到目标虚拟机,地址:'localhost:5005',传输:'socket'
5.configuration 现在已连接 - 继续探索您的调试技能以解决问题 :) :)