Debugging 如何调试Gradle build.Gradle文件(在调试器中,带有断点)?
是否有一个工具允许我在build.gradle文件中设置断点,并在调试器中逐步完成任务 注意:我相信我问的问题与类似的stackoverflow问题不同,关于调试Gradle插件,这里(大概)的目的是逐步完成位于单独文件中的定制Groovy或Java插件代码。我想在一个简单的build.Gradle文件中的Gradle任务中设置一个断点,比如Debugging 如何调试Gradle build.Gradle文件(在调试器中,带有断点)?,debugging,gradle,Debugging,Gradle,是否有一个工具允许我在build.gradle文件中设置断点,并在调试器中逐步完成任务 注意:我相信我问的问题与类似的stackoverflow问题不同,关于调试Gradle插件,这里(大概)的目的是逐步完成位于单独文件中的定制Groovy或Java插件代码。我想在一个简单的build.Gradle文件中的Gradle任务中设置一个断点,比如 task example { println "I want to set a breakpoint here" } …这样,当我运行gradle
task example {
println "I want to set a breakpoint here"
}
…这样,当我运行gradleexample
时,我可以在调试器中检查上下文
(对于那些将我引向IntelliJ的人……虽然JetBrains的网站宣传他们支持在IDEA UI中调试Gradle脚本,但AFAICT这是不真实的,因为据报道这在IDEA13 EAP中被破坏,并且在IDEA14中没有得到修复。请参阅)
是否有任何调试工具允许我在build.gradle文件中设置断点,或者gradle DSL中是否有某些东西使我无法在上面的示例中这样的任务中设置断点?个人当我需要调试构建脚本时,我会这样做: 你在里面做什么
export GRADLE_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"
然后运行您的构建
gradle clean install
最后,在IDE中的端口5005上放置一些断点并启动远程调试配置,就可以开始了 有更简单的方法: 只需在命令行中添加-Dorg.gradle.debug=true——无守护进程 例如:
gradle-nameOfTask-Dorg.gradle.debug=true——没有守护进程
然后,您应该启动IDE并使用localhost端口5005运行远程调试,仅此而已
Gradle正在等待您,因为标准选项server=y
org.gradle.debug
当设置为true时,Gradle将在启用远程调试的情况下运行构建,监听端口5005。请注意,这相当于将-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005
添加到JVM命令行,并将挂起虚拟机,直到附加了调试器
IntelliJ 2018.2添加了以与运行/调试其他项目类似的方式调试Gradle脚本的功能。您可以在发行说明中看到该公告 以下是2018.2部分文档的屏幕截图:
它还不支持
kotlin dsl
(请参阅)。在阅读了这里的各种答案后,以下步骤将帮助您调试build.gradle
,以便能够在任何自定义任务中中断和调查变量。我正在使用Eclipse远程调试工具
尝试{throw new RuntimeException('break');}catch(RuntimeException e){}
gradle mytask-Dorg.gradle.debug=true——无守护进程启动任务(不必在Eclipse中执行)
Run->addJava异常断点
,选择RuntimeException
并单击“确定”Run->Debug Configurations->Remote Java Application
,并创建侦听localhost:5005
的新配置。随便你怎么说都行。选择包含要调试的build.gradle
的项目。单击Apply
和Debug
build.gradle
中看到任何突出显示的东西,但你几乎可以猜到你在哪里void halt() {
try {
throw new RuntimeException('Break');
} catch (RuntimeException e) {
print('Paused')
}
}
task iterateDeclaredDependencies {
doLast {
Object configs = configurations.all
halt();
print(configs)
}
}
导出渐变选项对我不起作用 试试这个: 1添加远程调试配置 -agentlib:jdwp=transport=dt_套接字,服务器=y,挂起=n,地址=5005 2在渐变中添加断点 3
/gradlew您的任务--stacktrace-Dorg.gradle.daemon=false-Dorg.gradle.debug=true
4在studio中附加调试
点击图标
然后断点停止
若控制台不工作,请在studio的调试面板中单击此按钮。
android studio在我尝试此操作时不断告诉我以下错误:无法打开调试器端口(localhost:5005):java.net.ConnectException“连接被拒绝”运行gradle clean安装时,生成是否在“侦听地址为5005的传输dt_套接字”时停止OP询问是否有任何调试工具允许我在build.gradle文件中设置断点”,因此您可以展开“放置一些断点”吗“?你说得对,直接在build.gradle文件中对断点不起作用。我在想,因为我的源代码中有我想要调试的插件。但是,您可以将BreakPont放在org.gradle.api.internal.project.AbstractProject中您想要的配置阶段。e、 g.在org.gradle.api.internal.project.AbstractProject#dependencies(Closure-configClosure)上设置断点,以便在调用闭包依赖项{…}之前停止jvm
在IDE中启动远程调试配置意味着什么?你是怎么做到的?上的文档和上的代码表明是的,这基本上等同于@baptiste mesta提供的答案。我的gradle构建不会停止并等待调试器连接?gradle应该停止并等待调试器,你能给我看一下cmd吗?-Dorg.gradle.debug=true
在我第一次运行gradle(v3.5)时起作用,