Gradle插件開發祕籍之斷點調試(基於Intellij)

Gradle插件開發這件事說大不大說小不小,可是對於有必定體量規模的Java項目來說,從插件開發入手來思考解決問題,有的時候能找到意想不到的法門。因此說這是一門錦上添花的手藝。
廢話少說,相信對於不少Gradle插件開發朋友們,開發過程當中很大的一個痛點就是,插件的調試很痛苦,下面我就分享一下在這方面的心得。socket

1、增長運行參數

好吧這個很菜鳥,好比很經常使用參數的是--stacktrace,報錯後會打印出堆棧信息工具

2、Log輸出控制

這個很少說了,println就能夠了,能夠本身設置一些分級和flag。gradle

3、乾貨技巧:開啓調試模式,attach a debugger!

先上最終效果圖:
圖片描述spa

如上圖,是能夠正常地設置斷點調試和step into和step out、resume等等。
實現辦法和原理:
你們都知道Gradle基於Groovy,而Groovy其實就是Java,因此也一樣遵循JDWP協議,只是這個技巧彷佛在國內的文章中沒有人出來分享,我就在此分享給你們。
首先,在你要執行gradle命令的環境中加入以下環境變量(以Linux、MacOS爲例):插件

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

其中,address等號後面的參數就表示debugger要監聽的端口,這裏咱們設置爲5005。
而後執行gradle或gradlew任務,會發現有以下提示:命令行

以debug模式運行gradle

這時任務就不會繼續執行了,掛起等待Debugger的handshake!
這時咱們啓動IDE,以Intellij爲例,打開咱們的gradle插件項目(包含正在運行的插件源碼的項目),而後找到工具欄的執行區域,進入以下:debug

建立debugger

在界面裏添加一個運行項,Remote:調試

建立debugger

須要配置的最核心參數就是如圖所示的端口號,就是上文中的address:code

配置debugger

注意到下面有一個Search sources using ...意思是從什麼範圍查找源碼,保持默認就行了,這個debugger收到JDWP消息後會從當前工程中搜索源碼,基於當前的源碼進行與gradle命令行中的JDWP agent進行交互。server

OK,若是插件源碼中打好斷點,執行到代碼時就會掛起在相應位置了,大部分調試功能都很好使,你們能夠嘗試一下!這個技巧仍是比較簡單的,你們只要瞭解一下JDWP的核心原理,就能夠理解上述過程了!

時間有限,若有不妥,歡迎指正!

相關文章
相關標籤/搜索