Gradle插件开发系列之gradle插件调试方法

栏目: Android · 发布时间: 5年前

内容简介:这是这篇文章主要介绍在插件开发过程中,如何设置断点动态调试插件。首先由于插件项目和实际使用的项目是两个不同的项目,因此只能使用gradle的远程调试功能。下面以上面提到的插件下面是事例项目的代码目录

背景

这是 Gradle插件开发系列(点击查看) 系列的第三篇,整个文档基于开发的插件 一款检查Gradle依赖配置是否冲突的插件 完成。

这篇文章主要介绍在插件开发过程中,如何设置断点动态调试插件。首先由于插件项目和实际使用的项目是两个不同的项目,因此只能使用gradle的远程调试功能。下面以上面提到的插件 一款检查Gradle依赖配置是否冲突的插件 为例介绍。

启动插件和应用项目

代码目录

下面是事例项目的代码目录

Gradle-Dependencies-Check
	│
	├─── Gradle-Dependencies-Check-Plugin 构建依赖自动检查插件源码
	|
	├─── Sample 构建依赖自动检查插件测试用Demo
	│
	└─── README.md 项目介绍

启动项目

使用Android Studio 分别启动插件项目Gradle-Dependencies-Check-Plugin和应用项目Sample

一点说明

为了后面介绍方便,我们会把插件项目Gradle-Dependencies-Check-Plugin简称 插件工程 ,把应用项目Sample简称 Demo工程

配置调试信息

创建远程调试任务

首先为 插件工程 添加远程调试任务,点击选择 Edit Configurations …

Gradle插件开发系列之gradle插件调试方法

点击添加,在弹出的对话框中选择 Remote。

Gradle插件开发系列之gradle插件调试方法

这时会自动生成一个 Remote debug 的配置,建议所有配置都使用默认值,点击 OK 按钮。

Gradle插件开发系列之gradle插件调试方法

配置调试环境变量

Demo工程 根目录输入下面的命令开启gradle的远程调试:

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

例如:

➜  Gradle-Dependencies-Check git:(master) cd Sample
➜  Sample git:(master) ✗ export GRADLE_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"
➜  Sample git:(master) ✗

开始调试

  1. 插件工程 添加断点

  2. 然后在 Demo工程 根目录输入下面命令启动远程调试器:

    ./gradlew --no-daemon checkGradleDependencies  -Dorg.gradle.debug=true

    此时,终端会提示 Listening for transport dt_socket at address: 5005 ,表示调试环境已经OK,等待 attach 调试器。例如:

    例如:

    ➜  Sample git:(master) ✗ ./gradlew --no-daemon checkGradleDependencies  -Dorg.gradle.debug=true
     Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=1g; support was removed in 8.0
     Listening for transport dt_socket at address: 5005
  3. 插件工程 的IDE中点击 Debug 按钮,添加调试器,如下图:

    Gradle插件开发系列之gradle插件调试方法

    这时在 插件工程 的IDE的调试器终端中会打印:

    Connected to the target VM, address: 'localhost:5005', transport: 'socket'

    而在刚才 Demo工程 命令行终端中会打印:

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

    接上前面 Demo工程 的日志完整内容例如:

    ➜  Sample git:(master) ✗ ./gradlew --no-daemon checkGradleDependencies  -Dorg.gradle.debug=true
     Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=1g; support was removed in 8.0
     Listening for transport dt_socket at address: 5005
     Starting a Gradle Daemon, 1 incompatible Daemon could not be reused, use --status for details
    	
     > Starting Daemon

    此时调试器已经添加完成

  4. 插件工程 的IDE中再次点击 Debug 按钮,在 Demo工程 命令行查看构建开始执行,当运行到 插件工程 断点时,就会自动暂停。后续调试与正常调试一致。如下图:

    Gradle插件开发系列之gradle插件调试方法

  5. 调试结束,命令执行成功, 插件工程 的IDE的调试器终端中会打印另一行日志:

    Disconnected from the target VM, address: 'localhost:5005', transport: 'socket'
  6. 一次调试结束以后,如果需要再次调试,只需循坏执行上面的第1 ~ 5步

结束调试

彻底调试结束以后,在 Demo工程 根目录输入下面命令关闭gradle远程调试:

export GRADLE_OPTS=""

常见问题

  1. attach 调试器以后,再次点击 Debug 按钮,构建开始。但是没有在断点暂停

    问题原因一般有两种,一是断点本来就没有执行到,建议在task入口就添加一个断点。另一个原因是Demo工程开启了gradle的守护进程。这种情况检查启动远程调试器的命令是否加上了 ` –no-daemon` 参数

  2. attach 调试器以后,再次点击 Debug 按钮,弹框提示 not allowed to run in parallel:

    之前在调试时遇到过,再次点击 Debug 按钮时,弹出下面的提示框,选择 Stop and Return 即可:

    Gradle插件开发系列之gradle插件调试方法


以上所述就是小编给大家介绍的《Gradle插件开发系列之gradle插件调试方法》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

应用随机过程教程及在算法和智能计算中的随机模型

应用随机过程教程及在算法和智能计算中的随机模型

龚光鲁 / 清华大学出版社 / 2004-3 / 42.00元

应用随机过程教程及在算法和智能计算中的随机模型,ISBN:9787302069485,作者:龚光鲁,钱敏平著一起来看看 《应用随机过程教程及在算法和智能计算中的随机模型》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

URL 编码/解码
URL 编码/解码

URL 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具