Debugging 如何调试Gradle build.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

是否有一个工具允许我在build.gradle文件中设置断点,并在调试器中逐步完成任务

注意:我相信我问的问题与类似的stackoverflow问题不同,关于调试Gradle插件,这里(大概)的目的是逐步完成位于单独文件中的定制Groovy或Java插件代码。我想在一个简单的build.Gradle文件中的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中执行)
  • 在Eclipse do
    Run->addJava异常断点
    ,选择
    RuntimeException
    并单击“确定”
  • 在Eclipse中,再次转到
    Run->Debug Configurations->Remote Java Application
    ,并创建侦听
    localhost:5005
    的新配置。随便你怎么说都行。选择包含要调试的
    build.gradle
    的项目。单击
    Apply
    Debug
  • 此时,执行将开始,但将在异常引发行暂停。然后,您可以开始在“Debug->variables”视图中查看变量,检查堆栈跟踪,逐步完成代码等
  • 没有魔法,唉,你不会在
    build.gradle
    中看到任何突出显示的东西,但你几乎可以猜到你在哪里
  • 显然,在后续运行中,您不需要步骤3,在步骤4中,您可以重用先前创建的配置
  • 如果您想在多个地方使用它,只需创建一个方法,就可以使用不同类型的异常,并且可以用任何可能的方式来增强这个想法
  • 例如:

    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)时起作用,