调试JVM
- 安裝gdb(在Ubuntu下,這類(lèi)似于: sudo apt-get install build-essential )
- 如果您使用的是OpenJDK,請(qǐng)為其安裝調(diào)試符號(hào),以便調(diào)試器可以提供更具可讀性的輸出(同樣,在Ubuntu下,這將是sudo apt-get install openjdk-6-dbg –如果您使用的是6,則用7代替6。最新的OpenJDK)
現(xiàn)在,只需在您的java命令前加上gdb --args :
gdb --args java Foo
當(dāng)出現(xiàn)gdb提示符(“(gdb)”)時(shí),鍵入“ run”(不帶引號(hào))以開(kāi)始程序的實(shí)際運(yùn)行。 崩潰發(fā)生后,您應(yīng)該顯示以下消息:
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)部進(jìn)行調(diào)試,則可以執(zhí)行以下操作:在配置屬性中,將JRE設(shè)置為“ Alternate JRE”,并將Java可執(zhí)行文件指定為“ javag”(此外,請(qǐng)確保已選中“分配控制臺(tái)”通用標(biāo)簽)。
現(xiàn)在轉(zhuǎn)到您的JDK運(yùn)行目錄(在我的情況下為/ usr / lib / jvm / java-7-openjdk-i386 / bin)并創(chuàng)建一個(gè)具有以下內(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' $*還要?jiǎng)?chuàng)建具有以下內(nèi)容的javag-commands文件
run
最后,使javag可執(zhí)行( sudo +x chmod javag ),您就可以開(kāi)始了! 此解決方法是必需的,因?yàn)镋clipse在配置選項(xiàng)卡中不接受絕對(duì)路徑。 第二個(gè)文件用于自動(dòng)將“運(yùn)行”命令傳遞給gdb,而無(wú)需用戶(hù)在每次啟動(dòng)時(shí)自行鍵入。 另外,請(qǐng)記住,盡管GDB暫停了該進(jìn)程,但Java調(diào)試器(如Eclipse)無(wú)法與之通信,因此它們拋出各種錯(cuò)誤(如“目標(biāo)不響應(yīng)”)是正常的。
擁有無(wú)錯(cuò)誤的一年,但是如果您發(fā)現(xiàn)錯(cuò)誤,請(qǐng)讓它們至少具有可復(fù)制性
參考: Transylvania JUG博客上的JCG合作伙伴 Attila-Mihaly Balazs 調(diào)試JVM 。
相關(guān)文章 :
- JVM選項(xiàng):-client vs -server
- 如何解決生產(chǎn)問(wèn)題
- 調(diào)試生產(chǎn)服務(wù)器– Eclipse和JBoss展示
- 從CLI監(jiān)視OpenJDK
- 您的代碼中有幾個(gè)錯(cuò)誤?
翻譯自: https://www.javacodegeeks.com/2012/01/debugging-jvm.html
總結(jié)
- 上一篇: x1手柄连不上电脑(x1手柄蓝牙)
- 下一篇: ActiveMQ已准备好黄金时段