問題:
最近訪問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就自動進入調試模式的功能沒有了。但這需要開發者做若干設置才能調試。過程如下:
- 在IDEA的toolbar的debug區域,選擇您的當前的Grails App,然後再點擊Edit Configurations打開運行配置。
- 在Command Line欄修改run-app爲run-app --debug-fork,點擊OK按鈕保存。
- 到這一步,大家都會遇到點擊debug按鈕後,grails app停到一行信息Listening for transport dt_socket at address: 5005之後,就沒有了。連8080端口都訪問不了,更不要提調試了。
- 實際情況是,你還要再做一步。回到Edit Configurations,點擊左上角的+按鈕,選擇Remote,修改一下Unnamed名稱,比如localdebug,保存即可(此界面上Host=localhost和Port=5005是可以修改的,這在非本機遠程調試時就很有用了)。
- 回到IDEA主窗口,點擊debug,開啓調試localdebug,在Console上顯示Connected to the target VM, address: 'localhost:5005', transport: 'socket',就表示成功了。打開瀏覽器訪問http://localhost:8080/yourapp,即可進入斷點調試功能。
- 補充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] - 補充2:如果是運行於其他webserver,在JVM加上以下參數,也可以完成5005端口的監聽,可用於遠程調試。
-
-Xdebug -Xrunjdwp:server=y, transport=dt_socket,address=5005, suspend=n