簡體   English   中英

遠程調試使用 Gradle 執行的 JUnit 測試

[英]Remote debug a JUnit test executed using Gradle

我有以下情況:

機器 A:使用 Gradle 執行 JUnit 測試:

./gradlew :<directory> --tests <ClassName> --info

機器 B:我有一個 IDE(如 IntelliJ)。 我想為機器A創建一個遠程Java調試配置並調試測試。

我遇到了用於遠程調試的 gradlew 的“ --debug-jvm ”選項。 使用此參數,Gradle 測試運行器默認在端口 5005 上暫停。 我只能從同一台機器(機器 A)連接到此進程,但不能從機器 B 連接。

我按照https://www.thomaskeller.biz/blog/2020/11/17/debugging-with-gradle/中提到的步驟進行操作,但即使使用此配置,我也無法從機器 B 進行調試。我總是得到“連接來自機器 B 中的 IDE 的錯誤。

使用 Gradle 的 --info 選項,我可以看到添加到 JVM 的以下參數開始運行測試:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005

對於遠程調試,我認為地址應該在端口號之前有“*:”。 例如:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005

但是“--debug-jvm”沒有在參數中添加“*:”。

還嘗試了以下事情:

  1. 將“debugOptions”添加到 Gradle 的“測試”任務中:

    debugOptions { 啟用 = true 端口 = 8166 服務器 = true 掛起 = true }

結果是一樣的。 無法從機器 B 連接並導致 IDE 中出現“連接被拒絕”錯誤。

  1. 將以下屬性添加到 gradle.proprties:

org.gradle.daemon=false

org.gradle.jvmargs=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:10999

Gradle 的守護線程被上述屬性掛起,但不是測試執行線程。

Gradle 版本: 5.6.2
Java 版本: JDK 11

如果一切(運行測試和 IDE)都在一台機器上,那么一切正常。

所以問題是,如何真正“遠程”調試使用 Gradle 執行的 JUnit 測試?

謝謝你的幫助!

--debug-jvm 選項僅用於允許本地調試。 一種解決方法是在測試任務上使用 jvmArgs 為其提供所需的精確調試 arguments。 這對我有用。

示例:

jvmArgs '-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:30069'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM