IntelliJ IDEAdebugging器不能用于Grails项目
我无法在Intellij IDEA中debugging我的代码。 当debugging模式处于活动状态且正在运行时,但断点没有检查到代表有效且可停止的断点的“v”。
看到图片: http : //prntscr.com/1w0owu 。
我真的在网上search一个答案。 我想要做什么?
我已经尝试所有在这里提到没有成功。 唯一有用的信息是在这里 。
实质上,你应该通过向grails-app/conf/BuildConfig.groovy
添加以下内容来禁用分叉执行:
grails.project.fork = [ test: false, run: false ]
现在可以在IntelliJ IDEA Ultimate Edition v.12.1.6中通过普通的Debug进行debugging,无需远程debugging。 testing了Grails 2.3.1,Java 1.7.0_45,Windows 7 64位。
尝试这个:
在想法中,select“运行”button旁边的编辑configuration 。 然后添加远程 ,select你的名字,并保留默认的远程configuration设置。 (港口5005等)
使用从控制台运行您的应用程序
grails run-app --debug-fork
在想法中,从列表中select您的configuration,并在控制台显示信息时点击debuggingbutton:
Listening for transport dt_socket at address: 5005
自Grails 2.3以来, 分支执行几个Grails命令(例如run-app
, test-app
)被引入 。 如果你只是从IntelliJ IDEAdebugging一个Grails应用程序,那么GrailsStarter
进程将启动debugging选项。 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
的单独进程中ForkedTomcatServer
。 这是你的代码运行的地方,你的debugging器应该实际连接到的地方。
为此,在grails.project.fork
的run
configuration中,在BuildConfig.groovy
中设置debug: true
。 只需从IDEA运行Grails(不要debugging),当应用程序准备好提供HTTP请求时,您将在控制台中看到以下行:
Listening for transport dt_socket at address: 5005
这是您要指定一个单独的远程运行configuration的位置。 一旦连接了远程debugging器,发出一个HTTP请求,debugging就可以工作。
您还可以通过将与grails.project.fork
的命令项关联的值设置为false
来完全禁用 compile / test / run / war / console Grails命令的分叉执行 。 但是在Grails 2.3中,你将失去分叉执行的好处。
debugginggrails(2.3+)应用程序可以用两种方法完成。
1.简单的解决scheme:禁用debugging
编辑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,
优点:
- 很简单(继续你的发展)
缺点:
- 这消除了执行运行时代码replace的能力。 这意味着如果您更改了代码,将不会再自动提取,您将需要重新启动应用程序才能看到更改。 这可能非常耗时。
2.涉及解决scheme:debugging分叉运行时
这是一个更复杂的解决scheme,将debugging器附加到正在运行的grails应用程序。 这篇博文中有更详细的描述。
安装完成后,您将拥有一个额外的运行configuration,允许您以分叉模式启动grails,而另一个额外的运行configuration允许您debugging分叉模式。 问题在于你需要启动或者不能工作。
优点:
- 您有debugging和运行时代码replace
- 这不会干扰在正常模式下启动应用程序。 (即你有额外的select)
缺点:
- 设置需要一点时间
- 在debugging模式下启动需要是一个更复杂的两步过程(即需要更长的时间)
注意事项
解决scheme2在允许灵活性的意义上大多优越。 我个人不使用debugging很多,所以只需在正常模式下启动。 当我想debugging时,我在debugging模式下重新启动。
解决scheme1是更好的,如果你需要debugging,也需要重新启动很多。 例如,当您在BootStrap.groovy中处理您的域类或数据库设置时。
你看到这篇文章了吗? 它详细介绍了如何一步一步,让我过去了我的问题。
http://mrhaki.blogspot.com/2013/12/grails-goodness-debugging-app-in-forked.html
在2016年的Grails 3.x上,没有任何其他的答案适用于我/ Intellij 15.0.4。 这对我有用:
用这个命令在intellij中启动grails:
run-app --debug-jvm
控制台应输出:“侦听传输dt_socket地址:5005在环境:开发中运行在http:// localhost:8080的 Grails应用程序”
现在,您可以在Intellij中添加一个types为“Remote”的新configuration。 然后启动它的默认值。
新的debugging控制台窗口应该写入:“连接到目标VM,地址:'localhost:5005',transport:'socket'”
完成。
对于那些感兴趣的,引用grails 3.x文档来启动一个可debugging的服务器在2.8节,runningAndDebuggingAnApplication:
http://grails.github.io/grails-doc/3.1.x/guide/gettingStarted.html#runningAndDebuggingAnApplication
“有几种方法可以执行Application类,如果您使用的是IDE,那么您可以直接右键单击该类并直接从您的IDE运行它,这将启动您的Grails应用程序,这对于debugging也很有用,因为您可以debugging从命令行使用run-app –debug-jvm命令时,无需连接远程debugging器即可。
重要的提示。 当我尝试“只需右键单击该类并直接从您的IDE运行”,该应用程序确实启动。 但是,我发送给我的控制器的所有请求导致了500个错误消息:“无法parsing名称为”grailsDispatcherServlet“的servlet中名称为”/ myendpoint“的视图。
所以,我回到了上面的说明。
对于Grails 3和Idea(2016.1)来说,这是非常简单的事情。 根据其他答案的build议,不需要再编辑任何文件。
出于某种原因,“构思”工具栏中的debugging图标变灰,因此您只需导航到您的应用程序入口点(具有启动应用程序的静态主要方法的类),单击其中一个运行箭头左边的装订线并select“debugging”选项。
从JetBrains文档:
https://www.jetbrains.com/help/idea/2016.1/getting-started-with-grails-3.html
debuggingGrails 3应用程序
IntelliJ IDEA允许您使用Application.groovydebugging您的Grails 3应用程序。
在Project工具窗口中,打开init目录并右键单击Application.groovy从下拉列表中selectDebug Grails:'name'grails3_debug_app您也可以使用编辑器来启动debugging过程。
只有三个猜测:
尝试运行run-app
,而不是run-war
,都应该工作,但可能是run-war
只是不工作。
或者:尝试从控制台远程debugging:
grails -debug run-app
,然后在Idea中连接Remote Debug。
或者,最后的手段:将您的项目降级到以前的Grails版本可能会奏效。 是的,这真的很烦人。
希望这可以帮助。
我在Mac Os x Lion上使用最新的Grails 2.3.4对intellij进行了testing。
然后我尝试了Igors的build议,而且没有分叉模式。
grails.project.fork = [ test: false, run: false ]
请检查详细的Grails文档
如果你想debugging分叉模式,你应该检查以下博客文章解释很好。
http://blog.jdriven.com/2013/12/grails-goodness-debugging-app-forked-mode/
这不应该是默认configuration,只能由个人select。 在intellij中debugging模式下运行这两个configuration是一个令人费解的痛苦。 首先,您必须在run-app之后添加“–debug-fork”来设置或修改正常运行configuration。 其次,你必须configuration远程debugging,同时接受所有的默认值。 然后你必须运行运行configuration,当运行时,运行debuggingconfiguration。 太痛苦了 我更喜欢在开发的时候完全不用分叉选项。 时间就是金钱,我没有时间四处乱逛。 请参阅HAKI先生的解释。 http://blog.jdriven.com/2013/12/grails-goodness-debugging-app-forked-mode/
查看关于debuggingGrails分叉模式的博客。