遠(yuǎn)程調(diào)試代碼

遠(yuǎn)程debug調(diào)試java代碼

日常環(huán)境和預(yù)發(fā)環(huán)境遇到問題時(shí)本慕,可以用遠(yuǎn)程調(diào)試的方法本地打斷點(diǎn),在本地調(diào)試侧漓。生產(chǎn)環(huán)境由于網(wǎng)絡(luò)隔離和系統(tǒng)穩(wěn)定性考慮锅尘,不能進(jìn)行遠(yuǎn)程代碼調(diào)試。

整體過程是通過修改遠(yuǎn)程服務(wù)JAVA_OPTS參數(shù)布蔗,然后本地通過Eclipse或IDEA等工具調(diào)試藤违。

下面簡單介紹下理論。


理論

JPDA(Java Platform Debugger Architecture)是Java平臺調(diào)試體系結(jié)構(gòu)的縮寫纵揍。由3個(gè)規(guī)范組成顿乒,分別是JVMTI(JVM Tool Interface),JDWP(Java Debug Wire Protocol)泽谨,JDI(Java Debug Interface) 璧榄。

1.JVMTI定義了虛擬機(jī)應(yīng)該提供的調(diào)試服務(wù),包括調(diào)試信息(Information譬如棧信息)吧雹、調(diào)試行為(Action譬如客戶端設(shè)置一個(gè)斷點(diǎn))和通知(Notification譬如到達(dá)某個(gè)斷點(diǎn)時(shí)通知客戶端)骨杂,該接口由虛擬機(jī)實(shí)現(xiàn)者提供實(shí)現(xiàn),并結(jié)合在虛擬機(jī)中

2.JDWP定義調(diào)試服務(wù)和調(diào)試器之間的通信雄卷,包括定義調(diào)試信息格式和調(diào)試請求機(jī)制

3.JDI在語言的高層次上定義了調(diào)試者可以使用的調(diào)試接口以能方便地與遠(yuǎn)程的調(diào)試服務(wù)進(jìn)行交互搓蚪,Java語言實(shí)現(xiàn),調(diào)試器實(shí)現(xiàn)者可直接使用該接口訪問虛擬機(jī)調(diào)試服務(wù)丁鹉。 java調(diào)試工具jdb妒潭,就是sun公司提供的JDI實(shí)現(xiàn)悴能。eclipse IDE,它的兩個(gè)插件org.eclipse.jdt.debug.ui和org.eclipse.jdt.debug與其強(qiáng)大的調(diào)試功能密切相關(guān)雳灾,其中前者是eclipse調(diào)試工具界面的實(shí)現(xiàn)漠酿,而后者則是JDI的一個(gè)完整實(shí)現(xiàn)。


遠(yuǎn)程調(diào)試

遠(yuǎn)程調(diào)試分為主動連接調(diào)試谎亩,和被動連接調(diào)試记靡。這里以Eclipse為例。

主動連接調(diào)試:服務(wù)端配置監(jiān)控端口团驱,本地IDE連接遠(yuǎn)程監(jiān)聽端口進(jìn)行調(diào)試摸吠,一般調(diào)試問題用這種方式。

被動連接調(diào)試:本地IDE監(jiān)聽某端口嚎花,等待遠(yuǎn)程連接本地端口寸痢。一般用于遠(yuǎn)程服務(wù)啟動不了,啟動時(shí)連接到本地調(diào)試分析紊选。


主動連接調(diào)試

首先需要遠(yuǎn)程服務(wù)配置啟動腳本:

JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000"

如果是啟動jar包啼止,指令:

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 -jar test.jar?

這里-Xdebug是通知JVM工作在DEBUG模式下,-Xrunjdwp是通知JVM使用(java debug wire protocol)來運(yùn)行調(diào)試環(huán)境兵罢。transport是監(jiān)聽Socket端口連接方式(也可以dt_shmem共享內(nèi)存方式献烦,但限于windows機(jī)器,并且服務(wù)提供端和調(diào)試端只能位于同一臺機(jī))卖词。server=y表示當(dāng)前是調(diào)試服務(wù)端巩那,=n表示當(dāng)前是調(diào)試客戶端。suspend=n表示啟動時(shí)不中斷(如果啟動時(shí)中斷此蜈,一般用于調(diào)試啟動不了的問題)即横。address=8000表示本地監(jiān)聽8000端口。

遠(yuǎn)程服務(wù)(tomcat/jboss)啟動成功后裆赵,本地Eclipse對需要調(diào)試的地方打上斷點(diǎn)东囚,然后項(xiàng)目右鍵啟動遠(yuǎn)程調(diào)試:Debug as->Debug Configurations->Remote Java Application。Host為遠(yuǎn)程主機(jī)IP战授,Port為遠(yuǎn)程監(jiān)聽調(diào)試端口页藻,Connection Type為:Standard(Socket Attach),如圖:

點(diǎn)擊Debug植兰,然后打斷點(diǎn)份帐,遠(yuǎn)程服務(wù)運(yùn)行到斷點(diǎn)處本地就會中斷,然后進(jìn)行調(diào)試钉跷。


被動連接調(diào)試

首先需要Eclipse配置監(jiān)聽弥鹦,如主動連接調(diào)試的Eclipse配置圖片,Connection Type選擇:Standard(Socket Listen)爷辙,配置本地監(jiān)聽端口彬坏,比如默認(rèn)8000。點(diǎn)擊Debug開始等待遠(yuǎn)程連接調(diào)試膝晾。

然后配置遠(yuǎn)程服務(wù)啟動腳本:

JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8000,suspend=y"

如果是調(diào)試jar包栓始,指令:

java -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8000,suspend=y -jar remoting-debug.jar

參數(shù)含義和主動連接調(diào)試一樣,只是這里suspend=y表示啟動時(shí)就中斷血当,需要連接本地IDE調(diào)試啟動幻赚。address=ip:port,ip需要修改為本地的對外IP臊旭。

這樣遠(yuǎn)程項(xiàng)目啟動時(shí)就連接到本地落恼,方便調(diào)試項(xiàng)目啟動不了的問題。


總結(jié)

另外除了在啟動腳本如上配置外离熏,還可以用這種方式配置:

啟動時(shí):sh catalina.sh jpda start佳谦。修改啟動時(shí)是否中斷或本地監(jiān)聽端口,設(shè)置變量值:JPDA_SUSPEND=y JPDA_ADDRESS=9999滋戳。


原文出自https://www.cnblogs.com/jpfss/p/10271498.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钻蔑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子奸鸯,更是在濱河造成了極大的恐慌咪笑,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娄涩,死亡現(xiàn)場離奇詭異窗怒,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蓄拣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門兜粘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人弯蚜,你說我怎么就攤上這事孔轴。” “怎么了碎捺?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵路鹰,是天一觀的道長。 經(jīng)常有香客問我收厨,道長晋柱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任诵叁,我火速辦了婚禮雁竞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己碑诉,他們只是感情好彪腔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著进栽,像睡著了一般德挣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上快毛,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天格嗅,我揣著相機(jī)與錄音,去河邊找鬼唠帝。 笑死屯掖,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的襟衰。 我是一名探鬼主播贴铜,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼右蒲!你這毒婦竟也來了阀湿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤瑰妄,失蹤者是張志新(化名)和其女友劉穎陷嘴,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體间坐,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡啦吧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年杜恰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了黑界。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稍走。...
    茶點(diǎn)故事閱讀 40,013評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蜈七,靈堂內(nèi)的尸體忽然破棺而出秒拔,到底是詐尸還是另有隱情,我是刑警寧澤飒硅,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布砂缩,位于F島的核電站,受9級特大地震影響三娩,放射性物質(zhì)發(fā)生泄漏庵芭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一雀监、第九天 我趴在偏房一處隱蔽的房頂上張望双吆。 院中可真熱鬧,春花似錦、人聲如沸好乐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽曹宴。三九已至搂橙,卻和暖如春歉提,著一層夾襖步出監(jiān)牢的瞬間笛坦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工苔巨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留版扩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓侄泽,卻偏偏與公主長得像礁芦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子悼尾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容