How to debug with IntelliJ IDEA + Grails 2.3.x

問題:

最近訪問grails.org,看到grails framework已經發展到2.3.x了,不免想嚐嚐鮮。下載了最新的grails-2.3.x之後,創建了一個新的grails app。

添加Book domain對象後有自動生成了BookController和相關gsp views。在對BookController進行調試的時候,發現無法進入設定的斷點。起先以爲是IDE版本(IntelliJ  IDEA12.x.x ultimate)和Grails 2.3.x不兼容,但全部換上最新的IntelliJ IDEA 13和Grails 2.3.4之後,問題依然存在。


答案:

經過一番探索,終於找到答案,原來是grails 2.3.x之後,內嵌webserver換上了tomcat7,並且使用remote debug,IDEA點擊debug就自動進入調試模式的功能沒有了。但這需要開發者做若干設置才能調試。過程如下:

  1. 在IDEA的toolbar的debug區域,選擇您的當前的Grails App,然後再點擊Edit Configurations打開運行配置。
  2. 在Command Line欄修改run-app爲run-app --debug-fork,點擊OK按鈕保存。
  3. 到這一步,大家都會遇到點擊debug按鈕後,grails app停到一行信息Listening for transport dt_socket at address: 5005之後,就沒有了。連8080端口都訪問不了,更不要提調試了。
  4. 實際情況是,你還要再做一步。回到Edit Configurations,點擊左上角的+按鈕,選擇Remote,修改一下Unnamed名稱,比如localdebug,保存即可(此界面上Host=localhost和Port=5005是可以修改的,這在非本機遠程調試時就很有用了)。
  5. 回到IDEA主窗口,點擊debug,開啓調試localdebug,在Console上顯示Connected to the target VM, address: 'localhost:5005', transport: 'socket',就表示成功了。打開瀏覽器訪問http://localhost:8080/yourapp,即可進入斷點調試功能。
  6. 補充1:run-app --debug-fork的替代方案是修改grails-app/conf/BuidConfig.groovy中的grails.project.fork,debug從false改爲true
    run: [maxMemory: 768, minMemory: 64, debug: true, maxPerm: 256, forkReserve:false]
  7. 補充2:如果是運行於其他webserver,在JVM加上以下參數,也可以完成5005端口的監聽,可用於遠程調試。
  8. -Xdebug -Xrunjdwp:server=y, transport=dt_socket,address=5005, suspend=n
希望對大家有所幫助!

PS:IntelliJ IDEA 13 windows版本缺少內置svn的支持,要麼等13.0.1,要麼自己安裝一個svn client。
安裝完成後,要配置一下用戶環境變量PATH,把C:\Program Files\SlikSvn\bin加到PATH中去。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章