天天看點

線上應用雲調試系統--Zdebugger

Eclipse或許是我們最常用的Java IDE,它的debug子產品也基本能滿足我們的日常需求,但是不知道你有沒有想過類似的問題:

為什麼不能調線上應用呢?或許這不是Eclipse的錯,不過事實就是這樣

遠端調試應用為什麼一定要目标jvm啟動的時候就開啟調試端口呢?

遠端調試時隻能一個使用者連上去?想幾個人一起通過debug查下問題都不行

斷點設定在一個通用的地方,因為請求量大,線程瞬間都阻塞了?

Eclipse忘帶了?哈哈,當然這個不太會發生

Zdebugger的設計我們主要針對上面的場景分别提供了一些解決方案:

部署一套到線上,就可以解決因為環境問題而導緻的不可能,線上應用也可以調起來

提供了watch point的調試模式,對于同一個應用大家都可以上去設定斷點,然後經過斷點的時候Zdebugger會将一些變量資訊,線程資訊推給你,斷點是分使用者的噢

一個斷點隻斷住一個線程就可以解決斷點在通用位置導緻線程都阻塞而手忙腳亂的問題了

eclipse不在身邊,有浏覽器就行,Zdebugger設計成了一個web系統,無需安裝,想什麼時候用就什麼時候用

這種模式是我們大家都熟悉的使用最廣的調試模式,也就是代碼一行行一步步地調試,最常用的幾種操作:

step into(F5):進入到方法裡

step over(F6):轉到目前方法的下一行,如果目前方法結束了相當于下面的step out

step out(F7):跳出目前方法,進入到調用者的方法裡

continue(F8):跳過目前斷點,執行完後面的邏輯

當然還有目标程序連接配接/斷連接配接,設定/清除斷點,檢視表達式/變量/屬性等操作

總的來說這種模式當斷點到了的時候是至少需要suspend一個線程的,通過設定還可以suspend整個vm,将所有線程都suspend,直到你執行了continue。

這是在single step調試模式下提供的一個有意思的功能,當某個人通過single step模式對某個系統進行調試的時候,另外的人雖然不能幹預他的調試過程,但是可以觀察他的調試過程,當然不是大家圍觀在調試者的旁邊看着他操作,而是在自己的電腦上通過Zdebugger的首頁選中正在被調試的使用single step模式調試的機器進行接入,這個時候調試者的任何一個操作結果,比如檔案跳轉,線程堆棧變化等都将在您的頁面裡進行展示。

對于這種模式或許你很陌生,之前可能完全沒有聽說過,其實google的cloud debugger就是使用的這種模式,在某些情況下上面的Single Step調試模式根本不可行,比如我們線上的系統,如果讓你一步步調試, 線程阻塞了,對系統的處理能力也下降了,系統資源更是一個浪費,是以我們需要另外一種模式,也就是這裡要說的Watch Point調試模式,這種模式之于Single Step調試模式最大的差別是不需要人工進行上面的一系列單步操作,當然設定斷點這些還是需要的,線程也不會一直suspend,而且支援多人同時設定斷點進行調試。

具體過程是當斷點到了的時候,Zdebugger會将線程堆棧,局部變量等值都取出來,然後回報到關注該斷點的使用者,不過由于jdwp協定的緣故,目前還不能做到變量一層層遞歸找出所有值,隻遞歸取了四層的資料,不過我們現在正在考慮通過jvmti接口來解決這種缺陷,從google的cloud debugger來看好像解決了這個問題,不知道他們是從jvm上解決的,還是和我們目前這樣解決的,因為隻能看到他們的截圖,無法體驗他們的産品,是以也不知道他們究竟是如何的。

當資料回報到前端之後,該斷點會自動clear,除非您重新開啟該斷點,開啟操作隻需要在斷點清單裡的斷點前的checkbox裡勾上就可以了。

這是watch point模式下特有的一個功能,在這種模式下由于不能單步調試應用,那麼我們可以支援多人同時設定斷點了。原理其實很簡單,zdebugger可以根據斷點進行分類,哪些人關注哪些斷點,然後當某個斷點到了的時候将經過此斷點時的線程堆棧,局部變量等推給對應的使用者,當然同一個斷點可以有不同的人關注。

支援支付寶環境的svn和gitlab source自動下載下傳

支援Maven項目展示

支援檔案搜尋

支援特定檔案在source tree裡的樹狀定位展示

支援每個線程棧每一幀的局部變量擷取展示

支援臨時表達式

支援斷點表達式

支援三方包+jdk+svn source的檔案間的跳轉

支援内部類和同檔案裡多類的斷點設定

個人公衆号:

線上應用雲調試系統--Zdebugger

繼續閱讀