Intellj Idea 遠端除錯
對於分散式系統的除錯不知道大家有什麼好的方法。對於我來說,在知道遠端除錯這個方法之前就是在程式碼中打各種log,然後重新部署,上線,除錯,這樣比較費時。今天咱們來了解了解Java遠端除錯這個牛逼的功能,本文以Intellij IDEA為例講解怎麼使用遠端除錯。以Thrift入門教程這篇文章中使用的程式作為例子。這個程式由Thrift服務端和客戶端組成。描述一下遠端除錯需要解決的問題:
服務端程式執行在一臺遠端伺服器上,我們可以在本地服務端的程式碼(前提是本地的程式碼必須和遠端伺服器執行的程式碼一致)中設定斷點,每當有請求到遠端伺服器時時能夠在本地知道遠端服務端的此時的內部狀態。
下面按照步驟介紹怎麼遠端debug。
使用特定JVM引數執行服務端程式碼
要讓遠端伺服器執行的程式碼支援遠端除錯,則啟動的時候必須加上特定的JVM引數,這些引數是:
-Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=${debug_port}
其中的${debug_port}是使用者自定義的,為debug埠,本例以5555埠為例
本地連線遠端伺服器debug埠
開啟Intellij IDEA,在頂部靠右的地方選擇”Edit Configurations…”,進去之後點選+號,選擇”Remote”,按照下圖的只是填寫紅框內的內容,其中host為遠端程式碼執行的機器的ip/hostname,port為上一步指定的debug_port,本例是5555
然後點選Apply,最後點選OK即可
啟動debug模式
現在在上一步選擇”Edit Configurations…”的下拉框的位置選擇上一步建立的remote的名字,然後點選右邊的debug按鈕(長的像臭蟲那個),看控制檯日誌,如果出現類似“Connected to the target VM, address: ‘xx.xx.xx.xx:5555’, transport: ‘socket’”的字樣,就表示連線成功過了。
設定斷點,開始除錯
遠端debug模式已經開啟,現在可以在需要除錯的程式碼中打斷點了,比如:
如圖中所示,如果斷點內有√,則表示選取的斷點正確。
現在在本地傳送一個到遠端伺服器的請求,看本地控制檯的bug介面,劃到debugger這個標籤,可以看到當前遠端服務的內部狀態(各種變數)已經全部顯示出來了,並且在剛才設定了斷點的地方,也顯示了該行的變數值。