当前位置:  开发笔记 > 编程语言 > 正文

调试java应用程序而无需使用调试参数启动JVM

如何解决《调试java应用程序而无需使用调试参数启动JVM》经验,为你挑选了4个好方法。

通常要将debuger附加到正在运行的jvm,您需要使用如下参数启动jvm:

> java -Xdebug -Xrunjdwp:transport=dt_socket,address=1000,server=y,suspend=n

现在,如果我想调试未在调试模式下启动的进程,我该怎么办?

当生产系统(即没有调试args启动)表现出"随机"(我使用松散术语)错误时,就会出现这种情况.所以我不能用适当的参数重启jvm,因为没有人知道如何再次重现bug.在这种情况下是否无法连接到JVM?

只是为了澄清它是不可能使用像jdb这样的工具连接到已经运行的JVM,除非它们是在调试模式下启动的

来自JVM手册页

使用jdb的另一种方法是将其附加到已经运行的Java VM.必须使用以下选项启动要使用jdb调试的VM:

McDowell.. 46

您可以使用jsadebugd(JDK)将调试服务器附加到进程(在Windows上使用Windows 调试工具提供).它被标记为实验性的,因此您可能希望首先在测试机器上进行尝试.

用法:

jsadebugd 
jdb -connect sun.jvm.hotspot.jdi.SADebugServerAttachingConnector:debugServerName=localhost

可以使用找到arg的连接器名称jdb -listconnectors.



1> McDowell..:

您可以使用jsadebugd(JDK)将调试服务器附加到进程(在Windows上使用Windows 调试工具提供).它被标记为实验性的,因此您可能希望首先在测试机器上进行尝试.

用法:

jsadebugd 
jdb -connect sun.jvm.hotspot.jdi.SADebugServerAttachingConnector:debugServerName=localhost

可以使用找到arg的连接器名称jdb -listconnectors.



2> 小智..:

只是为了澄清它是不可能使用像jdb这样的工具连接到已经运行的JVM >>,除非它们是在调试模式下启动的

在苏联俄罗斯来源读你

jdb -connect sun.jvm.hotspot.jdi.SAPIDAttachingConnector:pid=9426



3> sk...:

VisualVM不是调试器,但您可以从中获取线程转储和堆转储,这对于诊断某些问题非常有用.最有用的功能需要JVM 5或6.



4> 小智..:

使用jstack(在死锁的情况下很有用)或者btrace VisualVM插件也可以做到这一点

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有