【问题标题】:How to remotely debug java app and forwarding the port to virtual machine?如何远程调试java应用程序并将端口转发到虚拟机?
【发布时间】:2023-03-11 15:33:01
【问题描述】:

我想在启用调试的主机(windows 7)中启动 java 应用程序

-Xdebug 
-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005

然后我想通过vagrant启动一个虚拟机,并将端口5005转发到guest机器。

在来宾机器上,我想连接到端口5005 并调试应用程序。

config.vm.network "forwarded_port", guest: 5005, host: 5005, protocol: 'tcp'
config.vm.network "forwarded_port", guest: 5005, host: 5005, protocol: 'udp'

问题是,一旦虚拟机运行,java 应用程序在我启动时立即崩溃。当我将调试端口更改为 5005 以外的其他端口时,应用程序启动。

【问题讨论】:

  • 您是否在运行 java 程序的同一台机器上转发端口 5005 中的传入流量?错了,java程序需要能够监听那个端口。
  • 我正在从主人的5005 转发到客人的5005 - 但我刚刚意识到我需要从客人的5005 转发到主人的5005
  • 即使这样也没有必要。如果您从访客:5005 转发到主机:5005,那么您可以在 localhost:5005 上的访客上进行调试,并使用隧道进行转发。但最好在 host:5005 本身的 guest 上进行调试。这有意义吗?
  • 是的,我只是使用 vm 的网关地址作为主机和 java 应用程序的调试端口。调试器现在连接,但不会在断点处中断。
  • 这是不同的问题,但很可能是因为源(来宾)和目标(主机)不同步。尝试方法入口断点而不是行断点。如果您想接受它作为正确答案,我正在将我的 cmets 转换为回复。

标签: java debugging vagrant remote-debugging portforwarding


【解决方案1】:

如 cmets 中所述,您不应在运行 JVM 的机器上转发端口,Java App 需要在该端口上接收流量,启动失败很可能是因为该端口已被转发。

另一端也不需要转发,你可以在 : 上调试。

【讨论】:

    猜你喜欢
    • 2013-12-20
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 2014-07-12
    • 2013-09-07
    • 1970-01-01
    相关资源
    最近更新 更多