是否有工具可以让我在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是否存在某些问题,使我根本无法在上面示例中的任务中设置断点?
6条答案
按热度按时间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命令行,并将暂停虚拟机,直到连接调试器。链接到文档
7kqas0il2#
IntelliJ 2018.2添加了以类似于运行/调试其他项目的方式调试Gradle脚本的功能。您可以在此处的发布说明中查看公告。
以下是2018.2部分文档的截图:
它还不支持
kotlin-dsl
(请参阅gradle/kotlin-dsl/issues/39)。jw5wzhpr3#
我个人在需要调试构建脚本时会这样做:
在你的终端里面做
然后运行构建
最后设置一些断点,并在IDE中的端口5005上启动远程调试配置,就可以开始了!
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的调试面板中单击此按钮。
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
的项目。单击Apply
和Debug
1.此时,执行将开始,但会在抛出异常的行处暂停。然后,您可以在'Debug -〉Variables'视图中查看变量,检查堆栈跟踪,单步执行代码等。
1.没有魔法,唉,你不会看到任何突出显示在
build.gradle
,但你几乎可以猜到你在哪里1.显然,在后续运行中,您不需要执行步骤3,而在步骤4中,您可以重用之前创建的配置
1.如果您想在多个地方使用此方法,只需创建一个方法,使用不同类型的异常,并随时以任何可能的方式增强此想法
例如:
5us2dqdw6#
我用
则2个Gradle进程正在侦听:
我可以通过Eclipse中的2个远程调试启动配置连接到这两个端口,尽管是同一个端口。