debugging 如何调试Gradle build.gradle文件(在调试器中,使用断点)?

svujldwt  于 2022-11-24  发布在  其他
关注(0)|答案(6)|浏览(212)

是否有工具可以让我在build.gradle文件中设置断点,并在调试器中逐步执行任务?
注意:我认为我提出的问题与关于调试Gradle插件的类似stackoverflow问题不同,其中(可能)的目的是逐步执行位于单独文件中的自定义Groovy或Java插件代码。我希望在简单的build.gradle文件中的Gradle任务中设置断点,例如...

task example {
   println "I want to set a breakpoint here"
}

...以便在运行gradle example时可以在调试器中检查上下文。
(For那些将我指向IntelliJ的人......尽管JetBrains的网站宣传他们支持在IDEA UI、AFAICT中调试Gradle脚本,但这是不真实的,因为据报告这在IDEA13 EAP中被破坏,并且在IDEA14中尚未修复。请参阅Debugging Gradle build files in Intellij / Android Studio
是否有任何调试工具允许我在build.gradle文件中设置断点,或者Gradle DSL是否存在某些问题,使我根本无法在上面示例中的任务中设置断点?

xqnpmsa8

xqnpmsa81#

还有更容易的办法:
只需在命令行中添加-Dorg.gradle.debug=true --no-daemon
例如:gradle nameOfTask -Dorg.gradle.debug=true --no-daemon
然后,您应该启动IDE并使用localhost端口5005运行远程调试,仅此而已。
Gradle正在等待您,因为标准选项server=y

org.gradle.调试

设置为true时,Gradle将在启用远程调试的情况下运行构建,侦听端口5005。请注意,这相当于将-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005添加到JVM命令行,并将暂停虚拟机,直到连接调试器。
链接到文档

7kqas0il

7kqas0il2#

IntelliJ 2018.2添加了以类似于运行/调试其他项目的方式调试Gradle脚本的功能。您可以在此处的发布说明中查看公告。
以下是2018.2部分文档的截图:

它还不支持kotlin-dsl(请参阅gradle/kotlin-dsl/issues/39)。

jw5wzhpr

jw5wzhpr3#

我个人在需要调试构建脚本时会这样做:
在你的终端里面做

export GRADLE_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"

然后运行构建

gradle clean install

最后设置一些断点,并在IDE中的端口5005上启动远程调试配置,就可以开始了!

voj3qocg

voj3qocg4#

export GRADLE_OPTS对我不起作用。
试试看:

1添加远程调试配置

-agentlib:jdwp=传输=dt_套接字,服务器=y,挂起=n,地址=5005

2在gradle中添加断点

3./gradlew your task --stacktrace -Dorg.gradle.daemon=false -Dorg.gradle.debug=true
4在Studio中附加调试单击图标

然后断点停止!!
x1c4d 1x指令集
如果控制台不运行,请在studio的调试面板中单击此按钮。

ia2d9nvy

ia2d9nvy5#

在阅读了这里的各种答案之后,下面的步骤将帮助您调试build.gradle,以便能够中断和研究任何自定义任务中的变量。
1.将以下简单代码放在要中断的位置:try {throw new RuntimeException('Break');} catch (RuntimeException e) {}
1.按照建议,在命令提示符下使用gradle mytask -Dorg.gradle.debug=true --no-daemon启动任务(不必在Eclipse中这样做)
1.在Eclipse中执行Run -> Add Java Exception Breakpoint,选择RuntimeException并单击“确定”
1.再次在Eclipse中转到Run -> Debug Configurations -> Remote Java Application并创建侦听localhost:5005的新配置。您可以随意命名它。选择一个包含您正在调试的build.gradle的项目。单击ApplyDebug
1.此时,执行将开始,但会在抛出异常的行处暂停。然后,您可以在'Debug -〉Variables'视图中查看变量,检查堆栈跟踪,单步执行代码等。
1.没有魔法,唉,你不会看到任何突出显示在build.gradle,但你几乎可以猜到你在哪里
1.显然,在后续运行中,您不需要执行步骤3,而在步骤4中,您可以重用之前创建的配置
1.如果您想在多个地方使用此方法,只需创建一个方法,使用不同类型的异常,并随时以任何可能的方式增强此想法
例如:

void halt() {
    try {
        throw new RuntimeException('Break');
    } catch (RuntimeException e) {
        print('Paused')
    }
}

task iterateDeclaredDependencies {
    doLast {        
        Object configs = configurations.all
        halt();
        print(configs)
    }
}

5us2dqdw

5us2dqdw6#

我用

set JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8989"

则2个Gradle进程正在侦听:

Listening for transport dt_socket at address: 8989
Listening for transport dt_socket at address: 8989

我可以通过Eclipse中的2个远程调试启动配置连接到这两个端口,尽管是同一个端口。

相关问题