最近协助QA测试我们基于EJB开发的系统由于应用程序在远程环境下运行并且在控制台和日志文件中没有输出足够的有用信息导致调试工作很困难这时发现了Sun的java平台调试架构(Java Platform Debugger Architecture)它能够对一个运行中的java应用程序进行全方位调试提供极大的帮助 JPDA是一组接口与协议JPDA主要由三个部分构成 Ø Java虚拟机工具接口(JVMTI)定义虚拟机(VM)在调试时必须提供的服务包括调试信息(如栈信息)调试行为(如客户端设置一个断点)和通知(如到达某个断点时通知客户端) Ø Java调试线协议(JDWP)定义在调试过程和调试器前端之间传输的信息和请求的格式 Ø Java调试接口(JDI)定义了调试者可以使用的调试接口以方便与远程的调试服务进行交互 当虚拟机的调试服务运行时虚拟机作为调试的服务提供端监听一个连接而调试器通过该连接与虚拟机进行交互调试器都支持两种方式的连接共享内存(被调试者和调试器位于同一系统)和 Socket连接(被调试者和调试器可位于任何地方包括同一系统)如果使用socket链接则在对应的JVM中以dt_socket为名确定自变量的类型如果被调试者和调试器位于同一机器之中且运行的是Windows系统则可以使用名为dt_schmem的共享内存连接 JVM参数设置 Ø Xdebug 启用调试 Ø Xrunjdwp<name>[=<value>]<name>[=<value>]…… 加载JVM的JPDA参考实现库 Ø server(是y或否n) 如server=y收到一个要依附的调试应用程序如server=n依附到指定地址的调试应用程序 Ø address 连接传送地址如果server=n尝试依附到这个地址调试应用程序如server=y收到这个地址的连接 Ø timeout 如果server=y它以毫秒为单位指定等待调试器依附的时间如server=n它以毫秒为单位指定依附到调试器所用的时间 Ø suspend 如是JVM延缓执行直到调试器与被调试JVM建立连接 将jvm参数添加至weblogic server的配置中即可开启remote debug模式如 Xdebug Xnoagent piler=none Xrunjdwp:server=ytransport=dt_socketsuspend=naddress= 是server监听的调试端口可通过env | grep WL_REMOTE_DEBUG_PORT 找出运行环境中weblogic的调试端口 设置完成后重启weblogic将会在启动日志中看到信息 Listening for transport dt_socket at address: Eclipse设置 首先配置一个remote launch 双击Remote Java Application 填充远程主机的IP和之前设置的端口号 |