20.5.3 Remote debug tunnel

Java的远程调试在诊断远程应用问题时很有用,不幸的是,当应用部署在你的数据中心外时,它并不总能够启用远程调试。如果你使用基于容器的技术,比如Docker,远程调试设置起来非常麻烦。

为了突破这些限制,devtools支持基于HTTP的远程调试通道。远程客户端(The remote client 在本地的)在8000端口提供一个本地server,这样远程debugger就可以连接了。一旦连接建立,调试信息就通过HTTP发送到远程应用(remote application 在远程服务器上的)。你可以使用spring.devtools.remote.debug.local-port属性设置不同的端口。

你需要确保远程应用(remote application 在远程服务器上的)启动时开启了远程调试功能(以debug方式启动应用,就是加入了debug的JAVA_OPS参数),通常,这可以通过配置JAVA_OPTS实现,例如,对于Cloud Foundry(VMware公司PaaS),你可以将以下内容添加到manifest.yml:

---
    env:
        JAVA_OPTS: "-Xdebug -Xrunjdwp:server=y,transport=dt_socket,suspend=n"

注意你不需要传递一个address=NNNN的配置项到-Xrunjdwp,如果遗漏了,java会使用一个随机可用端口

调试基于Internet的远程服务可能很慢,你可能需要增加IDE的超时时间。例如,在Eclipse中你可以从Preferences…选择Java -> Debug,改变Debugger timeout (ms)为更合适的值(60000在多数情况下就能解决)。

当使用IntelliJ IDEA进行远程调试时,所有的断点需要被设置为是阻塞线程的而不是VM。默认情况下,在IntelliJ IDEA的断点是阻塞VM而不是阻塞含有这个断点的线程的。这将会产生一个不希望的影响,就是在调试是会因为阻塞VM而阻塞了管理远程debug通道的管理线程,从而造成debugging session被冻结,所以使用IntelliJ IDEA进行远程调试,需要设置断点阻塞线程而非整个VM,请参IDEA-165769考具体设置

results matching ""

    No results matching ""