2013-10-08 81 views
41

我無法在Intellij IDEA中調試我的代碼。當調試模式處於活動狀態並正在運行時,但斷點沒有檢測到表示有效且可停止的斷點的「v」。IntelliJ IDEA調試器無法在Grails項目上工作

看到圖片:http://prntscr.com/1w0owu

我真的在網上搜索答案。我想要做什麼?

+0

它曾經工作過嗎?我遇到了intellij和grails不同步的情況,所以調試停止工作,因爲intellij沒有「意識到」代碼。 'grails clean'可以很快解決這個問題。什麼版本的Intellij和Grails? – Gregg

+0

我正在使用最新版本。 Grails 2.3.0和Intellij 12.1.5。 Clean命令不起作用。我意識到.grails/2.3.0/projects內的項目文件夾沒有創建。 – ricardogobbo

+0

當我在「grails.project.fork」下的* compile *設置中錯誤地設置了「debug:true」時,發生了這種情況。 – RMorrisey

回答

72

我已經嘗試所有在這裏提到沒有成功。 唯一有用的信息是here

在本質上則應該通過添加禁用分叉執行以下操作grails-app/conf/BuildConfig.groovy

grails.project.fork = [ 
    test: false, 
    run: false 
] 

現在調試中的IntelliJ IDEA終極版提供v.12.1.6只是沒有遠程調試普通調試。 經過Grails 2.3.1,Java 1.7.0_45,Windows 7 64位測試。

+2

在Grails 2.3.4和IntelliJ 13以及+1上測試。加工。 –

+2

測試Grails 2.3.8和IntelliJ 13.1.3以及+1工作。 –

+3

在Grails 2.4.0和IntelliJ 13.1.3上測試 - 全部正常工作!我個人剛剛評論過上述配置圖中的'run'和'test'行。 –

17

試試這個:

在理念選擇編輯配置從列表旁邊的 '運行' 按鈕。然後添加遠程,選擇您的名字並保留默認的遠程配置設置。 (端口5005等)

使用

grails run-app --debug-fork 

在想法運行從控制檯您的應用程序,從列表中選擇您的配置和打調試按鈕時,控制檯顯示的信息:

Listening for transport dt_socket at address: 5005 
+0

這就是我一直在尋找的東西。關鍵是使用IntelliJ自動嘗試爲我的Grails應用程序插入的調試配置設置_new_ ** Remote **調試配置_instead of_,這取決於我的應用程序的代碼。 我使用'grails -debug run-app'作爲我的控制檯命令,然後在IntelliJ的調試模式下運行新的遠程配置,並且它直接連接到我的grails應用程序中。 – guyot

1

只是猜三次:

嘗試運行run-app,而不是run-war,都應該工作,但可能是run-war只是不工作。

或者:嘗試從控制檯遠程調試:

grails -debug run-app,然後用遠程調試的思想交流。

或者,最後一招:將您的項目降級到以前的Grails版本可能會奏效。是的,這真的很煩人。

希望這會有所幫助。

+0

它必須是-debug-fork,否則你是對的 – fabiangebert

7

由於Grails的2.3,叉形執行數Grails的命令(例如run-apptest-app)爲introduced。 如果您只是從IntelliJ IDEA調試Grails應用程序,則GrailsStarter進程將啓動,其上具有調試選項。 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一個單獨的進程來啓動。這是您的代碼運行的地方,以及您的調試器應實際連接到的位置。

爲了實現這個目標,在BuildConfig.groovy的配置grails.project.fork的配置中設置debug: true。剛纔從IDEA(不調試)運行的Grails,你會看到下面一行在控制檯當應用程序已準備好爲HTTP請求:

Listening for transport dt_socket at address: 5005 

這是你想直接單獨remote run configuration來。只要連接遠程調試器,發出HTTP請求並調試就可以工作。

您可以爲編譯/測試/運行/戰爭/ Grails的控制檯也禁止分叉執行通過設置在grails.project.forkfalse命令條目相關聯的價值完全命令。但是,那麼您將失去Grails 2.3中添加的分支執行的好處。

+1

謝謝,這讓我走上了正軌。 Ted Naleid提供了一個很好的總結,並詳細說明了禁用分支執行以進行調試的優點和缺點,並提供了兩個有用的備選方案:http://naleid.com/blog/2014/11/10/debugging-grails-forked-mode – codehead

0

這不應該永遠是默認的配置,只留給個人的選擇。在intellij的調試模式下運行這兩種配置讓它變得非常痛苦。首先,您必須在run-app之後添加「--debug-fork」來設置或修改正常運行配置。其次,您必須配置遠程調試,同時接受所有的默認值。然後,您必須運行運行配置,並在運行時運行調試配置。多麼痛苦。我更喜歡在開發時完全不用分叉選項。時間就是金錢,我沒有時間四處亂逛。請參閱HAKI先生對此的解釋。 http://blog.jdriven.com/2013/12/grails-goodness-debugging-app-forked-mode/

+0

我認爲如果你首先給出答案,那麼答案會更有用,然後你的評論爲什麼它很煩人。也許也會放棄大部分評論。 – verdammelt

+0

沒問題...看到我上面編輯的條目:http://blog.jdriven.com/2013/12/grails-goodness-debugging-app-forked-mode/祝你好運。 –

+0

這是一個更新。我似乎沒有再遇到這個問題,但是如果它對你來說不重要,我會在conf目錄下的BuildConfig.groovy文件的部分內容中註釋,這些文件會在grails運行時處理JVM以優化內存。 //取消註釋(並調整設置)以分叉JVM以分離// classpaths //grails.project.fork = [ //運行:[maxMemory:1024,minMemory:64,debug:false,maxPerm:256 ] //] –

6

調試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應用程序。詳細描述如下in this blog post

設置後,您有一個額外的運行配置,允許您在分叉模式下啓動grails,而另一個額外的運行配置允許您調試分叉模式。問題在於你需要啓動它或者它不起作用。

優點:

  • 你調試和運行時的代碼替換
  • 這不開始在正常模式下的應用程序造成干擾。 (即你有額外的選項)

缺點:

  • 建立需要時間一點點
  • 在調試模式啓動需要的是一個更復雜的兩步過程(即它需要更長的時間)

思考

溶液2 MOS從某種意義上講,它具有更高的靈活性。我個人不使用調試很多,所以只需在正常模式下啓動。當我想調試時,我在調試模式下重新啓動。

如果您需要調試並且需要重新啓動很多,解決方案1將更好。例如,當您在BootStrap.groovy中處理域類或數據庫設置時。

0

結帳this博客有關調試Grails的叉形模式。

4

在2016年的Grails 3.x上,其他所有答案都不適用於我/ Intellij 15.0.4。這確實爲我工作:

開始的Grails在該命令的IntelliJ:

run-app --debug-jvm 

控制檯應該輸出:5005 Grails應用程序的環境中運行,在http://localhost:8080: 「在地址監聽運輸dt_socket發展「

現在您可以在Intellij中添加一個類型爲」Remote「的新配置。然後以默認值啓動它。

而新的調試控制檯窗口應該寫: 「連接到目標VM,地址: '本地主機:5005',運輸: '插座'」

完成。

對於那些有興趣,引用的Grails 3.X文檔用於啓動調試的服務器是在第2.8節,runningAndDebuggingAnApplication:

http://grails.github.io/grails-doc/3.1.x/guide/gettingStarted.html#runningAndDebuggingAnApplication

「有幾種方法來執行應用程序類,如果你正在使用IDE,那麼您只需右鍵單擊該類並直接從您的IDE運行它,它將啓動您的Grails應用程序。 這對於調試也很有用,因爲您可以直接從IDE進行調試,而無需連接遠程調試器使用命令行中的run-app --debug-jvm命令。「

重要說明。當我嘗試「只需右鍵單擊該類並直接從IDE運行它」時,該應用程序確實啓動了。不過,我發到我的控制器的所有請求導致500錯誤與消息:「無法解析視圖,名稱與名字‘grailsDispatcherServlet’小服務程序‘/ myendpoint’

所以,我恢復到上面的說明

2

這是Grails的3和Idea(2016.1)一個很簡單的事情。沒有必要編輯任何文件了,因爲在其他答案建議。

出於某種原因,這個想法工具欄中的調試圖標灰色,因此您只需導航到您的應用程序入口點(具有啓動應用程序的靜態主要方法的類),單擊左側排水槽中的一個運行箭頭,然後選擇t調試選項。

從JetBrains的文檔:

https://www.jetbrains.com/help/idea/2016.1/getting-started-with-grails-3.html

調試Grails的3應用

的IntelliJ IDEA讓您調試Grails的使用 Application.groovy 3應用程序。

在Project工具窗口,打開init目錄,並用鼠標右鍵單擊 Application.groovy從下拉列表中選擇調試的Grails:「名稱」 grails3_debug_app您也可以使用編輯器來啓動調試 過程。

相關問題