GradleDebug

Gradle构建源码断点调试配置

(本方式也支持build.gradle中设置的断点调试)

1 buildSrc配置

项目根目录下添加文件夹buildSrc,内部添加文件build.gradle:

repositories {
   mavenLocal()
   jcenter()
   google()
 }

 dependencies {
   //配置任意插件地址
   implementation 'com.android.tools.build:gradle:3.2.1'
   implementation "com.tencent.matrix:matrix-gradle-plugin:0.6.5.1"
 }

这样配置之后,在android studio的project视图下就能够在External Liberaries中看到Android Build Tool的源码,之后可以通过搜索需要调试的类和方法进行断点调试,目的是让IDE链接到gradle build tool 或各种自定义插件的源代码。(有时无法debug是因为该次build没有走断点处流程,先clean确保会走流程)

2 gradlew command

gradlew :app:compileDebugAidl -Dorg.gradle.daemon=false -Dorg.gradle.debug=true

也就是在需要debug的gradle语句后添加-Dorg.gradle.daemon=false -Dorg.gradle.debug=true。

之后可以看到Terminal中执行被阻塞,并输出如下:

To honour the JVM settings for this build a new JVM will be forked. Please consider using the daemon: https://docs.gradle.org/4.6/userguide/gradle_daemon.html.

\> Starting Daemon

这里如果想每次执行命令,即使不设置后面的-Dorg.gradle.daemon=false -Dorg.gradle.debug=true信息,也默认执行断点调试,可以配置环境变量,方法如下:

在系统环境变量里面添加:

GRADLE_OPTS 值为:

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

3 配置remote debug

Android Studio中按照如下步骤操作:

Menu → Run → Edit Configurations… → Add New Configuration → Remote → 自定义配置name → host: localhost → port: 5005 → OK(注意配置Use module classpatch:First search for sources of the debugged classes in the selected module classpath,也就是配置断点时源码查找路径)

4 执行remote debug

然后点击右箭头执行remote debug,当然前提是先在源码中设置好断点

断点停下时如果看不到变量信息,可以切换到如下Variables|Console查看详细变量值:

image-20210222140125645

如果还是有变量看不到值,需要确保将步骤1:中的buildSrc中的build.gradle配置好(配置的gradle版本要一致),配置成功后,鼠标悬浮即可查看变量值

调试gradle插件源码

基本方式和上述类似:

1:添加buildSrc;

2:在插件内部打断点(自定义plugin的apply方法内部);

3:gradlew :app:assembleDebug -Dorg.gradle.daemon=false -Dorg.gradle.debug=true

4:配置remote并debug

参考

https://www.colabug.com/3241705.html