成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

什么是Debug實現(xiàn)原理

什么是Debug實現(xiàn)原理,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

創(chuàng)新互聯(lián)建站是一家專注于網(wǎng)站建設(shè)、網(wǎng)站制作與策劃設(shè)計,尉氏網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務涵蓋:尉氏等地區(qū)。尉氏做網(wǎng)站價格咨詢:18982081108

下面將會講述JPDA的組成,Debugger的實現(xiàn)原理等。

程序異常了!
返回結(jié)果不對!
在我這兒正常啊。

每一次遇到這種異常的情況,要處理問題時,我們一定會想到

等我Debug一下,分分鐘解決。

而如果是線上的問題,我們一定會想

如果能debug一下該多好啊

我們在說起Debug的時候,一般是在IDE里代碼中加斷點,一步步跟蹤。然后觀察變量的值,觀察輸出等等。

這種在Debug工具,許多IDE中都有提供,像Eclipse, IDEA,NetBeans,甚至我們可以直接使用JDK自帶的jdb工具進行高度。這些工具都支持本地調(diào)試遠程調(diào)試。

那在我們加斷點,debug,單步調(diào)試等一系列動作背后,是如何實現(xiàn)的呢?

說到這些,就不得不提JPDA(Java Platform Debugger Architecture)。我們每次使用的debug功能,都是靠JPDA的支撐實現(xiàn)的。

什么是JPDA?

官方文檔里這樣介紹:

The Java Platform Debugger Architecture (JPDA) consists of three interfaces designed for use by debuggers in development environments for desktop systems.

我們看到,JPDA由三部分組成:

  • JVMTI(Java Virtual Machine Tool Interface)

  • JDWP(Java Debugger Wire Protocol)

  • JDI(Java Debug Interface)

熟悉JVM的朋友可能聽說過JVMPI和JVMDI,在JDK1.5他們統(tǒng)一被替換為JVMTI。

JVMTI

以前的文章里我們提到過Class的hotSwap,就是通過Instrument實現(xiàn)class的redefineretransform
而本質(zhì)上JVMTI是一個programming interface,主要用在開發(fā)和監(jiān)控上。而且它提供了接口去觀察(inspect) 應用狀態(tài)和控制應用的執(zhí)行。工具通過它提供的接口,可以進行如下功能的實現(xiàn):

  • profiling

  • debuging

  • monitoring

  • thread analysis

  • coverage analysis

可以看到,我們使用到的debug,只是JVMTI提供的眾從能力中的一種。

JDWP

觀察過Java debug進程的同學也許有印象,以debug方式啟動的JVM進程,看起來是這樣的:

-agentlib:jdwp=transport=dt_socket,address=127.0.0.1:63971,server=y,suspend=n

除了進程名之外,還在啟動參數(shù)里包含agentlib:jdwp這些。這個就是現(xiàn)在要介紹的JDWP。

什么是JDWP?
Java Debug Wire Protocol,是debugger和它要debug的JVM之間進行通訊的協(xié)議。更多具體協(xié)議的細節(jié)這里不介紹,感興趣的同學可以到這兒查看:
http://docs.oracle.com/javase/6/docs/technotes/guides/jpda/jdwp-spec.html

注意,這僅僅是一個協(xié)議的格式,具體的傳輸實現(xiàn)不是由JDWP來實現(xiàn)的。我們的debugger執(zhí)行的操作發(fā)送到JDWP的實現(xiàn)上,然后再轉(zhuǎn)給JVMTI來具體控制。

JDI

JDI是三個模塊中最高層的一個接口,通過JDI,debugger可以更方便的編寫符合JDWP格式的數(shù)據(jù),用來進行調(diào)試數(shù)據(jù)傳輸。JDI的引入,提高了開發(fā)debugger的效率。

所以,從整體上看,我們可以把JPDA看作一個兩個互相通訊的程序,所以我們可以在任意地點很方便的調(diào)試另一個JVM上運行的程序。

我們每次在IDE里進行代碼調(diào)試時,實質(zhì)上是通過IDE里的debugger這個界面執(zhí)行GUI操作,然后通過JDI發(fā)送數(shù)據(jù)到JDWP,再經(jīng)過JVMTI最終實現(xiàn)程序的高度。

每次我們打開IDE調(diào)試一個Java應用的時候,或者遠程attach一個Java進程的時候,別忘了這個IDE背后的身影---JPDA。

PS:Tomcat啟動腳本中也直接包含了debug方式啟動的功能,在命令行中輸入

catalina jpda start, Tomcat就以debug方式啟動了。

對于想了解源碼但不想把源碼以項目形式運行的同學,可以采用這種方式,然后使用遠程調(diào)試的方式,把源碼所在項目和這個attach起來就可以了。

關(guān)于什么是Debug實現(xiàn)原理問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。

文章題目:什么是Debug實現(xiàn)原理
文章網(wǎng)址:http://jinyejixie.com/article30/ijcspo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、用戶體驗、標簽優(yōu)化、網(wǎng)頁設(shè)計公司、移動網(wǎng)站建設(shè)手機網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機網(wǎng)站建設(shè)
涞源县| 呼玛县| 六枝特区| 乌拉特中旗| 武清区| 梓潼县| 孟连| 阿尔山市| 台前县| 溧阳市| 溧阳市| 枞阳县| 寿光市| 青阳县| 漳平市| 北安市| 思茅市| 平安县| 兴义市| 长泰县| 陆良县| 安徽省| 邻水| 邵阳县| 绩溪县| 昭通市| 武夷山市| 台中县| 庆云县| 凤冈县| 凤庆县| 台东市| 饶阳县| 启东市| 宿松县| 休宁县| 梁山县| 娱乐| 大丰市| 兴安盟| 灵丘县|