jvm调试工具_调试JVM

jvm调试工具

在某些(极少数)情况下,您可能会遇到使JVM本身崩溃的情况。 我最近通过将ThreadGroup的名称设置为null来进行管理 。 在这些情况下,调试JVM本身很有用,这样可以更精确地定位崩溃。 这是执行此操作的步骤(它们特定于Linux,因为Windows下没有现成的调试器):
  • 安装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

相关文章 :


翻译自: https://www.javacodegeeks.com/2012/01/debugging-jvm.html

jvm调试工具

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值