当前位置: 首页 > 面试题库 >

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

南门洋
2023-03-14
问题内容

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

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

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

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

只是为了澄清,除非将它们以调试方式启动,否则无法使用jdb之类的工具将其附加到已经运行的JVM中

从JVM手册页

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


问题答案:

你可能可以使用jsadebugd(JDK)将调试服务器附加到进程(在Windows上可通过Windows的调试工具获得)。它被标记为实验性的,因此你可能需要首先在测试机上进行尝试。

用法:

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

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



 类似资料:
  • 问题内容: 如何在Java程序中打开和关闭调试?如何在不重新编译Java程序的情况下打开和关闭调试? 问题答案: 无需使用IDE进行调试 1)您可以使用Assertions编写Java程序。您随时可以启用/禁用它们。 2)您可以使用配置了log4j.properties的日志。在Java程序中,您可以随时指定信息和调试日志,只要您想显示调试或信息日志等信息,就可以在log4j.properties

  • 我有一个Java Web Start应用程序,我使用它通过一个快捷方式启动: 但是在安装了JDK 1.8之后,它都停止了工作,我的javaws没有看到任何额外的X||D参数。我尝试过这种方式: 但没用。 我找到的唯一解决方案是使用Java控制面板设置参数,将它们直接添加到JVM中。 我如何设置参数为1.8好的旧方式? P.S.JDK 1.6 x32仍然可以很好地使用快捷方式。x64 1.7启动,但

  • 从昨天开始,当我在没有调试器的情况下启动应用程序时,它就会挂起。当我调试应用程序时,一切正常。我不知道我是不是应该把代码贴出来我觉得太多了。我正在使用Google Maps API。

  • 问题内容: 我创建了一个Java桌面应用程序(使用Swing),现在尝试通过使用JNLP从网络启动它使其工作。当我从终端启动应用程序时,它运行良好,但是一旦从JNLP启动它,它就不会关闭。我必须每次都手动终止该进程。 我读到如果将其用作默认关闭操作可能会出现问题,但事实并非如此。它使用(隐式)。另外,释放所有对象后,我将显式调用: 我猜想在关闭应用程序时可能会引发异常,但是我找不到从JNLP开始获

  • 我是Quarkus新手,正在使用Eclipse和Quarkus插件。 无论我是手动使用启动还是使用Eclipse夸克启动配置,应用程序似乎总是在运行测试。 我看到了类似的东西 有一段时间什么都没发生,直到我看到Quarkus标志、我的日志消息等。 也许我还没有仔细阅读文档,但我发现没有配置来关闭它并直接在开发模式下启动应用程序。 有人能帮我吗?

  • 我正在尝试直接在STS中调试我的Spring启动应用程序,右键单击项目并调试为Spring启动应用程序。我可以看到我的控制器类中的断点正在被击中,但它没有击中我的服务类中的断点,线程只是运行,有什么想法吗?