IntelliJ IDEA Debugger isn't working on a Grails Project
I have tried all mentioned here without success. The only helpful information is here.
In essence you should disable forked execution by adding the following to grails-app/conf/BuildConfig.groovy
:
grails.project.fork = [
test: false,
run: false
]
Now debugging is available in IntelliJ IDEA Ultimate Edition v.12.1.6 just by ordinary Debug without Remote debugging. Tested on Grails 2.3.1, Java 1.7.0_45, Windows 7 64-bit.
Try this:
In idea choose Edit configurations from list next to 'run' button. Then add Remote, choose your name and left default remote configuration settings. (port 5005 etc)
Run your app from console by using
grails run-app --debug-fork
In idea, choose your configuration from list and hit debug button when console display info:
Listening for transport dt_socket at address: 5005
Since Grails 2.3, forked execution for several Grails commands (e.g. run-app
, test-app
) was introduced.
If you just debug a Grails application from IntelliJ IDEA, the GrailsStarter
process will be started with debug options on. The output on the IDEA console will be:
/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'
The application itself will be started in a separate process named ForkedTomcatServer
. This is where your code runs and where your debugger should actually connect to.
To accomplish that, set debug: true
in BuildConfig.groovy
at the run
configuration of grails.project.fork
. Just run Grails now from IDEA (do not debug) and you will see the following line in the console when the application is ready to serve HTTP requests:
Listening for transport dt_socket at address: 5005
This is where you want to direct a separate remote run configuration to. As soon as your remote debugger connected, issue a HTTP request and debugging will work.
You can also disable forked execution for compile/test/run/war/console Grails commands entirely by setting the value associated with the command entry in grails.project.fork
to false
. But then you will lose the benefits for forked execution added in Grails 2.3.