如何 运行 在本地 kotlinc 上进行远程调试

How to run remote debug on local kotlinc

我想使用本地编译器编译一些示例 kotlin 项目。我从 githib 克隆 jetbrains/kotlin 项目并构建它。现在我在 /dist 文件夹中有本地编译器。我需要如何在示例项目中配置 gradle 以在其中使用此本地编译器并具有远程调试的能力?

最简单的方法是构建整个工具链并在您的测试项目中使用它。 为此,运行 Kotlin 项目中的 install Gradle 任务:

./gradlew install

这会将项目的所有 Maven 模块发布到 Maven 本地存储库(默认为 ~/.m2/repository),默认快照版本为 1.3-SNAPSHOT

然后,在你的测试Gradle项目中:

  • 如果您使用 buildscript 块和 apply 语句应用 Gradle 插件,请将 mavenLocal() 存储库添加到 buildscript { repositories { ... } } 并使用 Gradle 插件的快照版本:

    buildscript {
        repositories {
            mavenLocal()
            jcenter()
        }
        dependencies {
            classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.3-SNAPSHOT")
        }
    }
    
  • 如果使用 plugins { ... } 块应用插件,请修改 settings.gradle 脚本 并添加以下内容:

    pluginManagement {
        repositories {
            mavenLocal()
            gradlePluginPortal()
        }   
    }
    

    再次使用 Gradle 插件的 1.3-SNAPSHOT 版本:

    plugins {
        id("org.jetbrains.kotlin.jvm").version("1.3-SNAPSHOT")
    }
    

为了能够调试编译器,您需要运行它的进程与调试代理等待连接。通常,编译器是 运行 在一个更难连接的守护进程中。 Gradle 进程中的 运行 编译器要简单得多。为此,您需要在 Gradle 过程中将系统 属性 kotlin.compiler.execution.strategy 设置为 in-process(注意:这应该不是 Gradle 项目 属性 但是 Java 系统 属性 可以通过 -Dkey=value 传递或使用 System.setProperty(...).

设置

然后 运行 使用命令行 -Dorg.gradle.debug=true 构建 Gradle 使 Gradle 等待远程调试器。我建议 运行 从终端构建测试项目,而不是 IDE。

这看起来像:

./gradlew compileKotlin -Dorg.gradle.debug=true -Dkotlin.compiler.execution.strategy=in-process

Starting a Gradle Daemon, 1 busy Daemon could not be reused, use --status for details

> Starting Daemon

(此时,构建似乎挂了,但它只是在等待调试器,所以继续下面)

在您使用 Kotlin 项目的 IDE 中,在编译器代码中放置一些断点,并 attach the remote debugger 到 Gradle 进程。

请注意,在 Gradle 进程中使用 Kotlin 编译器 运行ning,后者可能会 运行 更快地耗尽内存。确保 Gradle 进程获得足够的堆 space.