《Java Remote Debug》
简介
如果是本地调试,那么在IDE工具(比如Eclipse)的帮助下,是非常容易的。但是如果想对部署在测试/生产环境中的程序进行调试时,你会怎么办呢?在这种情况下,源码已经被编译为中间代码,因此本地调试肯定是不行的,庆幸的是,JVM为开发者提供有远程调试参数,也就是说,我们可以利用这个特性,在本地的IDE工具中调试部署在远端的程序。
一、开启remote debug模式
每一个程序都寄宿在独立的JVM中,那么Java程序的远程调试,其实我们可以理解为多个JVM进程之间的TCP通信。如果希望你的程序支持远程调试,那么你需要在JVM启动时支持并开启debug模式。
Java7之前可以使用如下参数:
java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=7001,suspend=n
Java7之后可以使用如下参数:
java -agentlib:jdwp=transport=dt_socket,address=7001,server=y,suspend=n
简单解释下上述参数,server=y,表示支持监听debug client端的请求;address=7001,表示JVM进程之间的通信端口;suspend=y,表示debug client与debug server成功建立会话之后再启动JVM,如果为n,则反之。
二、执行remote debug
在开始remote debug之前,我们首先需要在本地源码指定位置上标记断点。笔者以eclipse为例,在菜单栏Debug Configgurations-->Remote Java Application中找到如下页面,如下所示:
当配置好debug client与debug server之间的会话信息后,就可以开始remote debug了。