在工作中,经常遇到项目在生产系统遇到问题,而在测试环境或者开发环境不能复现,这时候一个重要的方法就是要在生产系统进行调试,这里调试分为两种:
- 使用开发工具(eclipse)进行远程调试;
- 使用jdb进行远程调试,或服务器(生产系统)端调试;
首先介绍一下jdb,jdb即java debugger,是随jdk发布的java命令行调试工具,什么情况下需要用jdb工具进行调试呢?比如,客户不在本地,或者没有条件赶赴客户现场,客户现场只能提供一个远程桌面环境(如:teamview获取qq远程),这样就不能将开放工具连接到生产系统,只能通过jdb这样的命令行调试工具。
以上两种调试方式,不管采用哪一种,都需要在tomcat的启动脚本中设置JVM虚拟机参数,以便是tomcat JVM虚拟机工作在debug模式:
-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n
或者:
-Xdebug -Xrunjdwp,transport=dt_socket,server=y,address=5432,suspend=n,onthrow=java.io.IOException,launch=/sbin/echo
transport指定了调试数据的传送方式,dt_socket是指用SOCKET模式,另有dt_shmem指用共享内存方式,其中,dt_shmem只适用于Windows平台(windows平台使用jdb调试时,只能用dt_shmem方式,用eclipse远程调试则不限)。
server参数是指是否支持在server模式的VM中.
onthrow指明,当产生该类型的Exception时,JVM就会中断下来,进行调式。该参数可选。
launch指明,当JVM被中断下来时,执行的可执行程