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