jvm调试工具_调试JVM
jvm調(diào)試工具
在某些(極少數(shù))情況下,您可能會遇到使JVM本身崩潰的情況。 我最近通過將ThreadGroup的名稱設置為null來進行管理 。 在這些情況下,調(diào)試JVM本身很有用,這樣可以更精確地定位崩潰。 這是執(zhí)行此操作的步驟(它們特定于Linux,因為Windows下沒有現(xiàn)成的調(diào)試器):- 安裝gdb(在Ubuntu下,這類似于: sudo apt-get install build-essential )
- 如果您使用的是OpenJDK,請為其安裝調(diào)試符號,以便調(diào)試器可以提供更具可讀性的輸出(同樣,在Ubuntu下,這將是sudo apt-get install openjdk-6-dbg –如果您使用的是6,則用7代替6。最新的OpenJDK)
現(xiàn)在,只需在您的java命令前加上gdb --args :
gdb --args java Foo
當出現(xiàn)gdb提示符(“(gdb)”)時,鍵入“ run”(不帶引號)以開始程序的實際運行。 崩潰發(fā)生后,您應該顯示以下消息:
Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x6b195b70 (LWP 30273)] (gdb) Here you can use the commands “backtrace” and “backtrace full” to get an approximate idea of the crashsite. To continue running (although it will just exit most probably) input “c”. To exit (killing the JVM in the process) type “quit”. Consult the GDB tutorials available on the Internet for more commands and their parameters.如果您是從Eclipse內(nèi)部進行調(diào)試,則可以執(zhí)行以下操作:在配置屬性中,將JRE設置為“ Alternate JRE”,并將Java可執(zhí)行文件指定為“ javag”(此外,請確保已選中“分配控制臺”通用標簽)。
現(xiàn)在轉到您的JDK運行目錄(在我的情況下為/ usr / lib / jvm / java-7-openjdk-i386 / bin)并創(chuàng)建一個具有以下內(nèi)容的javag文件( sudo vim javag ):
#!/bin/bash gdb -x '/usr/lib/jvm/java-7-openjdk-i386/bin/javag-commands' --args '/usr/lib/jvm/java-7-openjdk-i386/bin/java' $*還要創(chuàng)建具有以下內(nèi)容的javag-commands文件
run
最后,使javag可執(zhí)行( sudo +x chmod javag ),您就可以開始了! 因為Eclipse在配置選項卡中不接受絕對路徑,所以此解決方法是必需的。 第二個文件用于自動將“運行”命令傳遞給gdb,而無需用戶在每次啟動時自行鍵入。 另外,請記住,盡管GDB暫停了該進程,但Java調(diào)試器(如Eclipse)無法與它進行通信,因此它們拋出所有類型的錯誤(如“目標不響應”)是正常的。
擁有無錯誤的一年,但是如果您發(fā)現(xiàn)錯誤,請讓它們至少具有可復制性
參考: Transylvania JUG博客上的JCG合作伙伴 Attila-Mihaly Balazs 調(diào)試JVM 。
相關文章 :
- JVM選項:-client vs -server
- 如何解決生產(chǎn)問題
- 調(diào)試生產(chǎn)服務器– Eclipse和JBoss展示
- 從CLI監(jiān)視OpenJDK
- 您的代碼中有幾個錯誤?
翻譯自: https://www.javacodegeeks.com/2012/01/debugging-jvm.html
jvm調(diào)試工具
總結
以上是生活随笔為你收集整理的jvm调试工具_调试JVM的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果手机怎么拦截陌生号码来电
- 下一篇: 使用Camel从WildFly 8向We