我有一個JVM應用程序,需要在IntelliJ 2016.3.5中使用具有Gradle任務(運行並測試爲依賴關係)的斷點進行調試。在Gradle和IntelliJ中使用斷點調試JVM應用程序(Java或Scala)2016.3.5
有關於如何用搖籃和IntelliJ完成調試各種來源:
- Debug Gradle plugins with IntelliJ
- Using Intellij to set breakpoints in gradle project(最有用的一個)
- https://youtrack.jetbrains.com/issue/IDEA-119551
- https://youtrack.jetbrains.com/issue/IDEA-86465
- https://youtrack.jetbrains.com/issue/IDEA-119494
但是,這些來源要麼過時,要麼意味着另一種情況。我不想調試Gradle腳本,而是運行實際的Java/Scala應用程序的JVM。而且,IntelliJ的最新版本使用Gradle Tooling API,它不提供關閉守護進程的選項。 JetBrains提供的本地支持僅在運行和測試任務中直接使用調試按鈕提供,但如果它們被定義爲來自其他任務(例如,檢查)的依賴項,則不提供本地支持。
據該人士透露,這是要走然後方式:
run { // or test, doesn't matter
jvmArgs "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"
// xor, or both, doesn't seem to make any difference
debug true
}
以任何方式,搖籃(或JVM)就會開始爲偵聽端口5005:
然後,我創建了一個具有以下參數的遠程配置:
但是當我啓動的IntelliJ遠程調試任務,它失敗:
我也使用端口5006和暫停= N沒有成功嘗試。在此之前,我嘗試在IntelliJ-Gradle運行任務中使用Gradle參數。然後,它確實連接了,但看起來像Gradle腳本,而不是應用程序JVM,因爲它沒有在斷點處中斷。如何解決這個問題?
爲什麼你不能簡單地用搖籃調試配置,例如在Gradle工具窗口中使用gradle任務上下文菜單中的調試操作? –
因爲在這種情況下,它實際上是爲我調試Gradle腳本,而不是Java或Scala代碼。這意味着,Java或Scala代碼中的斷點不會執行任何操作。 –
我重新檢查過它,甚至沒有調試過Gradle腳本。 –