- 在咱們的平常開發中,測試人員在測試環境遇到某個問題,經過日誌不足以鎖定問題,巴不得能夠遠程調試一下代碼
- 上一篇文章介紹了SpringBoot的啓動,在IDE裏直接運行應用的main方法,跳過了SpringBoot的Jarlanucher,不知道該如何調試Jarlanucher的啓動過程
- 想了解Tomcat的源碼,但無法調試Tomcat的啓動過程
- 我的電腦配置不高,沒法運行大量微服務,租用了某雲上的虛擬機跑微服務,只能靠手動添加日誌來排錯,影響開發效率
若是你遇到了上述問題卻無從下手,那麼你必定要了解一下遠程調試,而不是原地踏步用老舊的方法解決變幻莫測的問題windows
在很長的一段時間內,我本身一直覺得調試(Debug)就是IDE的功能,並且只能調試本地的程序,對於遠程環境則無能爲力。在一次瀏覽Github優秀的中文開源項目中瞭解到Java Agent,該項目甚至在Issue裏教開發者如何用遠程調試,這才知道原來JVM還提供了一套如此優秀的工具,真是相見恨晚啊!!!架構
Java Agent爲開發者提供了一種運行時修改字節碼的能力,例如JVM級別的AOP,不重啓應用直接修改字節碼等,利用該技術能夠玩出不少應用代碼沒法實現的花樣。socket
JDPA全稱Java Platform Debugger Architecture(Java平臺調試架構),定義了Java平臺上的調試體系架構,主要包括3個主要組成部分:JVMTI(Java虛擬機工具接口),JDI(Java調試連線協議)和JDWP(Java調試接口)微服務
JDWP全稱Java Debug Wire Protocol,定義了調試器和遠程JVM之間的調試通信協議工具
JDPA的體系很複雜,咱們做爲開發者先學會如何用就能夠了。用法也很簡單,啓動應用的參數加上如下參數就行了測試
-agentlib:jdwp=transport=dt_socket,address=6666,server=y,suspend=n調試
而後IDE裏面選擇Remote Java Application,填入對應的IP和端口,就能愉快地遠程調試了日誌