如何使用 intellij 调试 Java 注释处理器?

2022-08-31 20:33:02

如何使用 intellij 调试 Java 注释处理器?

最好使用IDEA IntelliJ。我尝试在处理器内部设置断点并运行,但它没有中断。


答案 1

如果确实需要调试注释处理器,则最好从命令行运行注释处理器,而不是在启用了调试的 IDE 中运行注释处理器,然后使用 IDE 的调试器附加到该处理器。


如果直接运行,则可以通过指定以下额外参数来调试此参数:javac

javac -J-Xdebug -J-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 ... (usual javac parameters go here)

如果运行 Maven,请使用标准命令代替 - Maven 在进程内运行编译器。mvndebugmvn


如果运行 Ant,请在运行之前将以下内容添加到环境变量中:ANT_OPTS

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000

通过所有这些执行,javac,Ant或Maven进程将等待您附加调试器,然后再实际开始执行。IntelliJ对此的说明在这里。对于 Eclipse,请点击此处


答案 2

本教程是为一个 Android 项目编写的。像往常一样,主模块名称是“应用程序”。该项目包含一个名为“注释”的子模块,它是“应用程序”的子依赖项。“app”模块使用 gradle 声明运行注释处理。apt project(':annotation')

简单版本(从终端运行编译并从IDE附加)

  1. [必填]添加新的项目配置“+” ->“远程”。选中“仅限单个实例”。所有其他设置都是自动生成的。保留为类路径。端口应保留为默认的 5005<whole project>

enter image description here

  1. [必填]请确保通过调用以下命令来停止所有 gradle 实例:./gradlew --stop
  2. [必填]运行命令 :./gradlew --no-daemon -Dorg.gradle.debug=true :app:clean :app:compileDebugJavaWithJavac

enter image description here

  1. 在调试模式下尽可能快地运行 APT 项目配置:)

enter image description here


  1. [提示]我们从一个 EMPTY gradle.properties 文件开始
  2. [提示]DO NOT USE gradle daemon ( --no-daemon / org.gradle.daemon=false option )
  3. [提示]在调试模式下运行 gradle ( org.gradle.debug=true 选项 )
  4. [提示]运行应用的模块编译,而不是处理器的模块编译(应用的编译运行注释处理!
  5. 我们通常不会在Android Studio中添加任何Java编译器设置(即文件->其他设置->默认设置)

扩展版本(使用 gradle.properties)

  1. 将以下内容添加到 gradle.properties 文件中:
    org.gradle.daemon=false
    org.gradle.debug=true

  1. 从终端运行编译:

./gradlew :app:clean :app:compileDebugJavaWithJavac

enter image description here


高级版本(只需在 IDE 中按调试)

  1. 将 bash 脚本添加到项目主目录(例如 compile.sh)
#!/bin/bash
./gradlew :app:clean :app:compileDebugJavaWithJavac &

请记住后台处理的“&”符号。

  1. 转到我们在步骤 1 中创建的 APT 配置设置,然后添加“启动前”配置。选择“运行外部工具”。

enter image description here

  1. 将路径添加到我们之前创建的 compile.sh 脚本。

enter image description here


警告

搞砸了 gradle 编译,编译过程中的 NullPointer 异常等有时会导致 AndroidStudio 被卡住(在 gradle 刷新阶段冻结)。如果无法从 IDE 停止 gradle,请在终端中使用此命令:

ps -A | grep gradle | awk '{ print $1; }' | xargs kill -9

在项目刷新期间关闭调试选项有时有助于 Android Studio 回到正确的轨道。


推荐