jvm遠(yuǎn)程調(diào)試參數(shù)與原理

      網(wǎng)友投稿 1676 2022-05-30

      一、調(diào)試參數(shù)解析

      服務(wù)端開(kāi)啟調(diào)試模式,在jvm啟動(dòng)參數(shù)增加

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

      參數(shù)解釋:

      -Xdebug 啟用調(diào)試特性。

      -Xrunjdwp 在目標(biāo) VM 中加載 JDWP 實(shí)現(xiàn)。它通過(guò)傳輸和 JDWP 協(xié)議與獨(dú)立的調(diào)試器應(yīng)用程序通信。

      transport 這里通常使用套接字傳輸。但是在 Windows 平臺(tái)上也可以使用共享內(nèi)存?zhèn)鬏敗?/p>

      server 如果值為 y,目標(biāo)應(yīng)用程序**將要連接的調(diào)試器應(yīng)用程序。否則,它將連接到特定地址上的調(diào)試器應(yīng)用程序。

      address 這是連接的傳輸?shù)刂贰H绻?wù)器為 n,將嘗試連接到該地址上的調(diào)試器應(yīng)用程序。否則,將在這個(gè)端口**連接。

      suspend 如果值為 y,目標(biāo) VM 將暫停,直到調(diào)試器應(yīng)用程序進(jìn)行連接。

      客戶端連接遠(yuǎn)程調(diào)試端口

      客戶端可以Intellij IDEA和eclipse等IDE開(kāi)發(fā)工具,本文以Intellij IDEA為例

      二、遠(yuǎn)程調(diào)試原理

      JPDA(Java Platform Debugger Architecture) 定義了一個(gè)完整獨(dú)立的體系,它由三個(gè)相對(duì)獨(dú)立的層次共同組成,而且規(guī)定了它們?nèi)咧g的交互方式,或者說(shuō)定義了它們通信的接口。這三個(gè)層次由低到高分別是?Java 虛擬機(jī)工具接口(JVMTI),Java 調(diào)試線協(xié)議(JDWP)以及 Java 調(diào)試接口(JDI)。這三個(gè)模塊把調(diào)試過(guò)程分解成幾個(gè)很自然的概念:調(diào)試者(debugger)和被調(diào)試者(debuggee),以及他們中間的通信器

      在調(diào)試者和被調(diào)試著之間,調(diào)試命令和調(diào)試結(jié)果,都是通過(guò)?JDWP 的通訊協(xié)議傳輸?shù)摹K械拿畋环庋b成 JDWP 命令包,通過(guò)傳輸層發(fā)送給被調(diào)試者,被調(diào)試者接收到 JDWP 命令包后,解析這個(gè)命令并轉(zhuǎn)化為 JVMTI 的調(diào)用,在被調(diào)試者上運(yùn)行。類(lèi)似的,JVMTI 的運(yùn)行結(jié)果,被格式化成 JDWP 數(shù)據(jù)包,發(fā)送給調(diào)試者并返回給 JDI 調(diào)用。而調(diào)試器開(kāi)發(fā)人員就是通過(guò) JDI 得到數(shù)據(jù),發(fā)出指令

      JVMTI(Java Virtual Machine Tool Interface)即指 Java 虛擬機(jī)工具接口,它是一套由虛擬機(jī)直接提供的 native 接口,它處于整個(gè) JPDA 體系的最底層,所有調(diào)試功能本質(zhì)上都需要通過(guò) JVMTI 來(lái)提供。通過(guò)這些接口,開(kāi)發(fā)人員不僅調(diào)試在該虛擬機(jī)上運(yùn)行的 Java 程序,還能查看它們運(yùn)行的狀態(tài),設(shè)置回調(diào)函數(shù),控制某些環(huán)境變量,從而優(yōu)化程序性能。

      JDWP(Java Debug Wire Protocol)是一個(gè)為 Java 調(diào)試而設(shè)計(jì)的一個(gè)通訊交互協(xié)議,它定義了調(diào)試器和被調(diào)試程序之間傳遞的信息的格式。在 JPDA 體系中,作為前端(front-end)的調(diào)試者(debugger)進(jìn)程和后端(back-end)的被調(diào)試程序(debuggee)進(jìn)程之間的交互數(shù)據(jù)的格式就是由 JDWP 來(lái)描述的,它詳細(xì)完整地定義了請(qǐng)求命令、回應(yīng)數(shù)據(jù)和錯(cuò)誤代碼,保證了前端和后端的 JVMTI 和 JDI 的通信通暢。

      JDI(Java Debug Interface)是三個(gè)模塊中最高層的接口,在多數(shù)的 JDK 中,它是由 Java 語(yǔ)言實(shí)現(xiàn)的。 JDI 由針對(duì)前端定義的接口組成,通過(guò)它,調(diào)試工具開(kāi)發(fā)人員就能通過(guò)前端虛擬機(jī)上的調(diào)試器來(lái)遠(yuǎn)程操控后端虛擬機(jī)上被調(diào)試程序的運(yùn)行。

      三、常見(jiàn)調(diào)試技巧

      3.1.條件斷點(diǎn)

      如果你不知道如何添加斷點(diǎn),只需點(diǎn)擊左邊面板(行號(hào)前面)斷點(diǎn)即被創(chuàng)建。在調(diào)試界面中,“斷點(diǎn)”視圖會(huì)把所有被創(chuàng)建的斷點(diǎn)列出來(lái)。我們可以給它加一個(gè)布爾條件,也就是說(shuō),該斷點(diǎn)會(huì)被激活并且如果布爾條件為真,就會(huì)執(zhí)行該斷點(diǎn),否則將會(huì)跳過(guò)往下執(zhí)行。

      3.2.異常斷點(diǎn)

      在斷點(diǎn)視圖中,有一個(gè)J!標(biāo)記按鈕!我們可以使用該按鈕來(lái)添加一個(gè)Java異常斷點(diǎn)。例如,我們想讓程序在遇到空指針異常(NullPointerException)時(shí),仍然能繼續(xù)調(diào)試,那么我們可以使用該按鈕來(lái)添加一個(gè)異常斷點(diǎn)!

      3.3.監(jiān)視點(diǎn)

      這是一個(gè)非常好的功能,當(dāng)選定的屬性訪問(wèn)或修改程序時(shí),程序會(huì)停止執(zhí)行并允許進(jìn)行調(diào)試。在Outline視圖中選擇一個(gè)類(lèi)變量并從上下文菜單中選擇切換監(jiān)視點(diǎn),屬性監(jiān)視點(diǎn)將會(huì)被創(chuàng)建,在斷點(diǎn)(Breakpoints)視圖中會(huì)把所有監(jiān)視點(diǎn)用列表的形式顯示出來(lái)。

      3.4.評(píng)估/檢查

      按Ctrl+Shift+D或者Ctrl+Shift+I來(lái)顯示選定變量或者表達(dá)式的值。我們也可以給一個(gè)變量或表達(dá)式添加永久觀察點(diǎn),當(dāng)程序在調(diào)試時(shí),這些觀察點(diǎn)就會(huì)在表達(dá)式視圖(Expression view)中顯示出來(lái)。

      3.5.修改變量值

      在調(diào)試過(guò)程中,我們可以修改變量值。先選好一個(gè)變量然后進(jìn)入變量視圖(Variables view),根據(jù)變量類(lèi)型在其對(duì)應(yīng)的Value列里輸入值即可。

      3.6.在Main函數(shù)里面停止執(zhí)行

      jvm遠(yuǎn)程調(diào)試參數(shù)與原理

      在運(yùn)行/調(diào)試設(shè)置中,編輯配置對(duì)話框中有“Main”這個(gè)選項(xiàng)卡,我們可以勾選“Stop in main”這個(gè)復(fù)選框。如果選中,那么在調(diào)試一個(gè)基于main方法的Java程序時(shí),程序會(huì)在main方法第一行位置便停止執(zhí)行。

      3.7.環(huán)境變量

      并不是在系統(tǒng)屬性中添加環(huán)境變量,我們可以在編輯配置對(duì)話框中很方便地進(jìn)行添加。

      3.8.Drop to Frame

      這也是我最喜歡的一個(gè)功能。調(diào)試期間,可以重新跳到調(diào)用堆棧框架的開(kāi)始處執(zhí)行,并且變量值也會(huì)回到最初。根據(jù)回檔調(diào)整堆棧的深度,這個(gè)功能的主要用途是所有變量狀態(tài)可以快速回到方法開(kāi)始執(zhí)行時(shí)候的樣子,然后你可以重新進(jìn)行一遍一遍執(zhí)行,這樣就可以在你關(guān)注的地方進(jìn)行多次調(diào)試,但是在執(zhí)行過(guò)程中也會(huì)產(chǎn)生一些副作用,比如插入到數(shù)據(jù)庫(kù)里面的數(shù)據(jù)是無(wú)法刪除的!

      3.9.分布過(guò)濾

      當(dāng)我們進(jìn)入(F5)方法的時(shí)候,我們還可以訪問(wèn)其外部庫(kù)(比如java.*),我們可能不需要這個(gè)庫(kù),就可以在Perference選項(xiàng)卡頁(yè)面添加一個(gè)過(guò)濾器來(lái)排除這個(gè)包。

      EI企業(yè)智能 智能數(shù)據(jù) 數(shù)據(jù)湖治理中心 DGC

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:FPGA設(shè)計(jì)心得(4)Aurora IP core 的定制詳情記錄
      下一篇:嵌入式軟件開(kāi)發(fā)是做什么的?要學(xué)哪些課程?
      相關(guān)文章
      亚洲区小说区图片区QVOD| 日韩国产欧美亚洲v片| 亚洲精品无码成人片在线观看| 国产AV旡码专区亚洲AV苍井空| 亚洲国产综合在线| 亚洲精品国产福利片| 亚洲网站免费观看| 亚洲国语在线视频手机在线| 亚洲成aⅴ人片在线观| 亚洲精品成人网站在线播放| 中文字幕亚洲色图| 亚洲精品在线播放| 亚洲三级在线播放| 国产亚洲福利在线视频| 亚洲欧美日韩国产精品一区| 亚洲精品国产首次亮相| 精品久久久久久久久亚洲偷窥女厕| 在线a亚洲老鸭窝天堂av高清| 亚洲AV无码乱码在线观看| 国产精品亚洲一区二区三区| 女bbbbxxxx另类亚洲| 亚洲av麻豆aⅴ无码电影| 亚洲精品无码专区2| 国产亚洲成归v人片在线观看| 亚洲线精品一区二区三区影音先锋| 中文字幕亚洲图片| 亚洲国产成人一区二区精品区| 亚洲av无码国产精品色午夜字幕| 亚洲AV成人精品网站在线播放| 久久精品a亚洲国产v高清不卡| 亚洲美女人黄网成人女| 亚洲精品福利你懂| 亚洲国产精品无码观看久久| 亚洲国产精品视频| 国产l精品国产亚洲区在线观看| 亚洲色图在线观看| 亚洲av片不卡无码久久| 亚洲av无一区二区三区| 国产成人高清亚洲| 午夜亚洲AV日韩AV无码大全| 亚洲国产成人九九综合|