jvm调试工具
- 安装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
jvm调试工具