java - 在不使用调试参数启动 JVM 的情况下调试 java 应用程序

标签 java debugging jvm jvm-arguments

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

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

现在如果我想调试一个不是在 Debug模式下启动的进程,我该怎么办?

当生产系统(即在没有调试参数的情况下启动)出现“随机”(我松散地使用该术语)错误时,就会出现这种情况。所以我无法使用适当的参数重新启动 jvm,因为没有人知道如何再次重现该错误。这种情况下是否无法附加到JVM?

澄清一下,除非它们是在 Debug模式下启动的,否则无法使用 jdb 之类的工具附加到已经运行的 JVM 上

来自 JVM 手册页

Another way to use jdb is by attaching it to a Java VM that is already running. A VM that is to be debugged with jdb must be started with the following options:

最佳答案

您也许可以使用 jsadebugd ( JDK ) 将调试服务器附加到进程(在 Windows 上可用 Debugging Tools for Windows )。它被标记为实验性的,因此您可能需要先在测试机器上试用它。

用法:

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

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

关于java - 在不使用调试参数启动 JVM 的情况下调试 java 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/376201/

相关文章:

java - Xstream 映射 XML 的 "choice"元素

java - Spring 不会尝试将值注入(inject)到 constructor-arg 占位符中

Java 泛型 - 构造函数中的类型不匹配

.net - MSIL 或 .NET C# 中创建的 exe 文件的调试器

c# - 从 VB6 DLL 项目调试 C#.Net DLL 项目

java - 如何在多个 JVM 之间拥有一个通用对象

java - 如何在Java 8中同时按desc中的值和键按自然顺序对Map进行排序

ruby - 在 REPL 中调试本地 gem

java - 估计 64 位 Java 中的最大安全 JVM 堆大小

jvm - 优化从 DVD 加载 JRE 和 JVM 的时间