IntelliJ遠程調試詳解
概述
對於分散式系統的調試不知道大家有什麼好的方法。對於我來說,在知道遠程調試這個方法之前就是在代碼中打各種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這個標籤,可以看到當前遠程服務的內部狀態(各種變數)已經全部顯示出來了,並且在剛才設置了斷點的地方,也顯示了該行的變數值。
※宏定義的正確寫法,三目運算的宏定義
※查看linux版本及lsb release安裝及一些想法
TAG:程序員小新人學習 |