java 调试 工具_Java调试器–权威的工具列表
java 調(diào)試 工具
Java調(diào)試是一個(gè)復(fù)雜的空間。 調(diào)試器的類型很多,工具也很多。 在此頁面中,我們將介紹7種類型的調(diào)試器之間的區(qū)別,并查看每個(gè)類別中的主要工具,以幫助您為正確的工作選擇正確的工具。
以下是我們介紹的調(diào)試器類型:
- CLI調(diào)試器
- IDE調(diào)試器
- 構(gòu)建自己的調(diào)試器
- 堆轉(zhuǎn)儲
- 歷史調(diào)試器
- 動態(tài)追蹤
- 生產(chǎn)調(diào)試
- 塔基皮
定義
使用廣泛的定義,錯(cuò)誤是實(shí)例,其中我們編寫的代碼與我們獲得的輸入不匹配。 這些的不同影響可以大致分為–
當(dāng)然,工具和類別之間存在重疊,因?yàn)樗鼈儽举|(zhì)上都具有相同的目的-讓我們看到我們所期望的狀態(tài),以便我們可以修復(fù)代碼,并使其達(dá)到期望。
1.命令行調(diào)試器
主要工具 :主要參與者是jdb ,它是JDK附帶的,與JVM等效,是gdb。 它具有命令行界面,可以連接到正在運(yùn)行的JVM。 像gdb一樣,它的功能也很強(qiáng)大,您可以使用jdb進(jìn)行任何功能,就像使用功能強(qiáng)大的IDE調(diào)試器一樣。 jdb有一個(gè)補(bǔ)充-jstack-它使您可以在給定時(shí)刻打印實(shí)時(shí)JVM的線程調(diào)用堆棧。 但是,這不會捕獲變量或堆狀態(tài)。
在以下情況下使用 :jdb的最大優(yōu)點(diǎn)是其可移植性。 您可以相當(dāng)快地將其安裝到服務(wù)器上,而不必遠(yuǎn)程連接調(diào)試器。 如果您正在處理服務(wù)器上的惡劣環(huán)境,并且有能力讓JVM檢查它,那么jdb是您最好的朋友。
缺點(diǎn) :jdb和jstack的缺點(diǎn)是,與其他命令行工具一樣,它們在日常使用中效率不高。 這將我們帶入下一個(gè)類別。
2. IDE調(diào)試器
主要工具 :Eclipse和NetBeans是該類別中的兩個(gè)工具。 兩者都使用與jdb類似的技術(shù)來附加或啟動新的JVM。 盡管不是很輕便,但您確實(shí)會遇到麻煩,這可以使調(diào)試更短,更有趣。
在以下情況下使用 :假設(shè)您每天都不是Dexter( 神童 ,而不是連環(huán)殺手)。
缺點(diǎn) :作為高端桌面應(yīng)用程序,它們不是您要在生產(chǎn)計(jì)算機(jī)上運(yùn)行的東西。 始終存在進(jìn)行遠(yuǎn)程調(diào)試的可能性,但是在復(fù)雜的環(huán)境中,解決該問題的可能性很小。
3.構(gòu)建自己的調(diào)試器
到目前為止,我們已經(jīng)描述的所有調(diào)試器都基于相同的JVM開放調(diào)試體系結(jié)構(gòu),最常見的是使用JDWP(Java調(diào)試器有線協(xié)議)與正在運(yùn)行的JVM通信。 JSwat是在此框架之上構(gòu)建的獨(dú)立調(diào)試器的示例。 是否想學(xué)習(xí)如何構(gòu)建自己的Java / Scala調(diào)試器? 請點(diǎn)擊這里 。
在以下情況下使用 :構(gòu)建自定義JVM擴(kuò)展,或者對JVM的工作方式非常感興趣。
缺點(diǎn) :這是一件很復(fù)雜的事情,尤其是當(dāng)您不想影響目標(biāo)JVM的狀態(tài)時(shí),這是非常正確的事情,因此,您需要一個(gè)非常有說服力的理由來說明為什么不能使用經(jīng)過考驗(yàn)的現(xiàn)有工具。
4.堆轉(zhuǎn)儲
主要工具 :jmap,MAT。 在許多情況下,就像Rick Grimes一樣 ,您正在與死者打交道。 在這些情況下,您正在查看的是JVM堆的快照,而不是已停滯的實(shí)時(shí)JVM的快照。 JDK附帶的jmap允許您從實(shí)時(shí)JVM生成堆轉(zhuǎn)儲。 有很多工具可以讓您瀏覽和分析轉(zhuǎn)儲。 JDK附帶的jhat和visualVM在這方面做得很好。 Eclipse插件MAT和NetBean的HeapWalker是很好的選擇,因?yàn)樗鼈兝昧艘呀?jīng)強(qiáng)大的IDE UI。
在以下情況下使用 :發(fā)生復(fù)雜錯(cuò)誤且無法應(yīng)用常規(guī)調(diào)試技術(shù)(例如,該應(yīng)用程序在客戶的服務(wù)器上運(yùn)行)。 另一種選擇是通過打開JVM -HeapDumpOnOutOfMemoryError標(biāo)志來使用堆轉(zhuǎn)儲來分析內(nèi)存泄漏,以使JVM在堆耗盡后自動轉(zhuǎn)儲堆的內(nèi)容。
缺點(diǎn) :使用堆轉(zhuǎn)儲的最大缺點(diǎn)是它們的重量與堆本身的重量一樣大(這很可能意味著堆在GB中)。 然后必須將其轉(zhuǎn)回給您進(jìn)行分析。 在生產(chǎn)中捕獲它們也不是在公園中漫步。
5.歷史調(diào)試器
主要工具 :這類工具取決于您是否能夠或不想停止JVM來收集狀態(tài)或進(jìn)行堆快照。 Chronon DVR是這種方法的一個(gè)很好的例子。 在此,調(diào)試器使用字節(jié)碼檢測從代碼本身內(nèi)部記錄數(shù)據(jù)。 這通常包括諸如調(diào)用方法的順序以及傳遞給它們的參數(shù)之類的事情。 這使調(diào)試器可以“重播”代碼,并讓您了解執(zhí)行時(shí)的流控制。 重播解決方案(由CA收購)是另一種使用不同方法的示例,其中記錄了對JVM的IO輸入,然后將其“重播”回活動實(shí)例–模擬執(zhí)行后的代碼。
在 以下情況下使用 :此類工具的主要途徑通常是在質(zhì)量檢查期間,通過捕獲實(shí)際的運(yùn)行時(shí)狀態(tài),它們可以幫助使錯(cuò)誤更易于重現(xiàn)。 另一種情況是讓客戶或支持工程師臨時(shí)運(yùn)行該工具,以在應(yīng)用程序在生產(chǎn)中表現(xiàn)異常時(shí)從JVM捕獲狀態(tài)。
缺點(diǎn) :這些工具的最大缺點(diǎn)是日志記錄會花費(fèi)您很多,而日志記錄會花費(fèi)很多。 這意味著歷史悠久的調(diào)試器可以將應(yīng)用程序的速度降低50%到一個(gè)數(shù)量級,從而限制了可以使用這些應(yīng)用程序的生產(chǎn)方案的數(shù)量。
6.動態(tài)跟蹤
主要工具 :BTrace。 使用此類別中的工具,您可以從正在運(yùn)行的JVM中有選擇地打印(“跟蹤”)狀態(tài)信息,而無需暫停它,也不必記錄正在發(fā)生的一切。 可以將它視為動態(tài)編織到一段新代碼中,該新代碼從代碼本身中打印值以供您查看。 BTrace是一個(gè)杰出的工具,它引入了自己的語法,可讓您定義要在代碼中跟蹤的位置和內(nèi)容。 該語法還設(shè)計(jì)為僅支持只讀操作,以防止您實(shí)際更改程序的狀態(tài)或引起無限循環(huán)。
在以下情況下使用 :最常用于嘗試針對特定問題調(diào)試服務(wù)器(例如,連接池已耗盡)或在不停止JVM執(zhí)行的情況下臨時(shí)收集特定統(tǒng)計(jì)信息的情況。
缺點(diǎn) :與調(diào)試器一樣,通常不建議從生產(chǎn)服務(wù)器進(jìn)行動態(tài)跟蹤(并且很多時(shí)間是不允許的)。 還有一個(gè)小的學(xué)習(xí)曲線,可以在服務(wù)器環(huán)境中有效地使用動態(tài)跟蹤。
7.生產(chǎn)調(diào)試
主要工具 :用于記錄狀態(tài)的日志記錄框架(log4j,Logback)和用于大規(guī)模分析數(shù)據(jù)的日志分析器(Logstash,Splunk…)。
在以下情況下使用 :這是一個(gè)相當(dāng)困難的區(qū)域,因?yàn)楫?dāng)您處理生產(chǎn)系統(tǒng)時(shí),使JVM停頓以查看狀態(tài)或進(jìn)行堆轉(zhuǎn)儲通常是很大的禁忌。 那是因?yàn)槟鷮?shí)際上是要關(guān)閉服務(wù)器來調(diào)試它,這通常僅在極端情況下才能完成。
我們通常在運(yùn)行時(shí)從JVM中提取狀態(tài)而不停止?fàn)顟B(tài)的方法是通過有選擇地將變量值記錄到文件中(通常是在Java記錄框架的幫助下)。 稍后,我們可以使用各種工具來解析數(shù)據(jù),從簡單到尾部,一直到可擴(kuò)展的日志分析器,例如開源Logstash和企業(yè)Splunk。
缺點(diǎn) :這里最大的缺點(diǎn)是我們當(dāng)然需要事先知道(并有效地執(zhí)行)登錄。 日志也可以很快被填滿,并且無需開發(fā)團(tuán)隊(duì)的大量紀(jì)律,還可能包含很多不必要的數(shù)據(jù)或錯(cuò)過了一些關(guān)鍵數(shù)據(jù)。
科學(xué)家觀察到,將日志文件中的數(shù)據(jù)拼湊在一起以了解導(dǎo)致錯(cuò)誤的變量狀態(tài),這是夜間和假日消遣的一種非常受歡迎的開發(fā)人員。
我們在構(gòu)建Takipi時(shí)考慮了一個(gè)簡單的對象。 我們想讓開發(fā)人員輕松知道何時(shí)以及為何中斷生產(chǎn)代碼。 這意味著,無論何時(shí)開始發(fā)生新的異?;蛉罩惧e(cuò)誤,我們都會捕獲它并通知您。 第二部分是跟蹤部署,以說明問題從哪個(gè)開始以及發(fā)生的頻率。 最后(也是最有趣的部分)是生產(chǎn)調(diào)試部分。 對于每個(gè)異?;蝈e(cuò)誤,Takipi會在錯(cuò)誤發(fā)生時(shí)向您顯示確切的源代碼和變量狀態(tài)(包括本地值和對象值),就像發(fā)生錯(cuò)誤時(shí)您在那兒一樣。
翻譯自: https://www.javacodegeeks.com/2013/12/java-debugger-the-definitive-list-of-tools.html
java 調(diào)試 工具
總結(jié)
以上是生活随笔為你收集整理的java 调试 工具_Java调试器–权威的工具列表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设置第一显卡(设置第一显卡peg和igd
- 下一篇: 用电脑翻译韩语可是字体写不上(字体用韩文