1 描述
1.1 背景
在项目中,会遇到一些问题,本地测试正确,测试环境测试也正确,但线上环境却出现问题,由于线上环境又缺少一些必要的问题定位手段,这时可以通过远程调试来调试程序。但原则上,我们还是尽可能通过业务逻辑、代码分析、日志定位来解决线上问题,远程调试是一把双刃剑,可能解决线上问题,但也可能导致线上出现新的问题。
本文以Tomcat7+eclipse+Centos6.5为环境,描述如何进行远程调试。
1.2 方法和步骤
1. 修改Tomcat配置
在catalina.sh中添加如下:
CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n" |
参数说明如下:
-Xdebug | 启用调试模式 |
-Xrunjdwp<sub-options> | 加载JVM的JPDA参考实现库 |
transport=dt_socket | Socket连接,可选dt_shmem 通过共享内存的方式连接到调试服务器 |
address=8000 | 调试服务器监听的端口 |
server=y | 是否是服务器端,n为客户端 |
suspend=n | 启动过程是否加载暂停,y为启动时暂停,方便调试启动过程 |
2. 修改Centos防火墙
vim /etc/sysconfig/iptables 添加一行: -A INPUT -p tcp -m state --state NEW -m tcp --dport 8000 -j ACCEPT 然后重启防火墙使其生效(开放的端口8000需要和tomcat中配置的8000一致) service iptables restart |
3. 使用Eclipse进行调试
1) 打开debug
2) 设置debug
3) 执行debug
设置完毕后,点击“Debug”按钮,在代码中打上断点,程序运行到断点后,就可以看到效果,具体如图:
点击红框内的按钮,可以取消远程调试。