代码调试是大家在日常应用开发定位BUG时会经常使用的技能。然而在客户生产环境下,一没有开发环境,二没有外网连接,如果此时应用出问题,而通过日志又无法定位时,该怎么办呢?
也许有人会按如下步骤来定位问题(假设BUG可复现且客户允许应用服务重启):
- 在本地可能出问题的相关代码中添加许多的日志信息,以将应用运行状态打印出来。
- 打包并部署至客户现场环境
- 复现BUG并查看日志信息并最终解决问题
其实JDK中提供的JDB是一个更加理想现场调试工具,其包含的命令列表如下:
1 | ** JDB命令列表 ** |
有关JDB的使用详细介绍请参考官方文档。接下来我将用JDB调试Tomcat(以Tomcat7为例)下的应用来介绍下JDB的简单用法。
使用JDB进行调试,大概有下面几个步骤:
- 在服务器上创建setenv.bat文件,并输入如下内容,并将该文件放在Tomcat安装目录的bin目录下,并重启Tomcat;
1
set CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n"
- 将应用系统的源码解压至某一目录,如src_dir1与src_dir2
- 在CLI下输入以下命令连接至服务器上的Tomcat
1
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8787,timeout=3000 -sourcepath src_dir1:src_dir2
这样就可以进入JDB的DEBUG环境了,你可以通过stop命令创建断点,通过next命令单行调试,通过step命令单步调试,通过step up命令返回至上层调用点等,具体使用网上一堆参考资料。
转载请注明出处:cloudnoter.com