使用 Eclipse 远程调试 Java 应用程序

远程调试对应用程序开发的帮助:
  a. 为不能托管开发平台的低端机器开发程序,或在专用的机器上(比如服务不能中断的 Web 服务器)调试程序。
  b. 运行在内存小或 CUP 性能低的设备上的 Java 应用程序(比如移动设备),
  c. 开发人员想要将应用程序和开发环境分开,等等。

先决条件
  a. Eclipse V3.4(Ganymede)。
    套接字(socket)监听连接器被添加到 Remote Java Application 启动配置类型。
  b. 使用 Java Virtual Machine (JVM) V5.0 或更新版本

JPDA 简介
  Java Platform Debugger Architecture (JPDA) 技术是一个多层架构,使您能够在各种环境中轻松调试 Java 应用程序。
  由两个接口(分别是 JVM Tool Interface 和 JDI)、
  一个协议(Java Debug Wire Protocol)和
  两个用于合并它们的软件组件(后端和前端)组成。

常用缩略词
  JDI — Java 调试接口(Java Debug Interface)
  JDT — Java 开发工具(Java Development Tools)
  JDWP — Java 调试网络协议(Java Debug Wire Protocol)
  JPDA — Java 平台调试器架构(Java Platform Debugger Architecture)
  JVMDI — JVM 调试接口(JVM Debug Interface)
  JVMTI — JVM 工具接口(JVM Tool Interface)(1.5开始将用JVMTI代替1.4中的JVMDI)

Note:
  JVMTI 规定必须为调试提供 VM。
  JDWP 描述调试信息的格式,以及在被调试的进程和调试器前端之间传输的请求,
  调试器前端实现 JDI,比如 Eclipse、Borland JBuilder 等。
  根据 Sun 的 JPDA 规范,被调试的程序常常称为 debuggee。
  JDI 是一个高级的接口,它定义用于远程调试的信息和请求。


图1:Java平台调试器架构(JDPA)
Components Debugger Interfaces

             Components                      Debugger Interfaces

                 /    |--------------|
                /     |     VM       |
 debuggee -----(      |--------------|  <---- JVMTI - Java VM Tool Interface
                \     |   back-end   |
                 \    |--------------|
                 /           |
 comm channel --(            |  <------------ JDWP - Java Debug Wire Protocol
                 \           |
                 /    |--------------|
                /     |  front-end   |
 debugger -----(      |--------------|  <---- JDI - Java Debug Interface
                \     |      UI      |
                 \    |--------------|	  

JPDA 规范中的两个术语:连接器和传输。
  连接器是一个 JDI 抽象,用来在调试器应用程序和目标 VM 之间建立连接。
  传输定义应用程序如何进行访问,以及数据如何在前端和后端之间传输。

可用的连接器:
  连接套接字连接器
  连接共享内存连接器
  监听套接字连接器
  监听共享内存连接器
  启动命令行连接器

在调试器应用程序和目标 VM 之间建立连接时,有一端将用作服务器并监听连接。
随后,另一端将连接到监听器并建立一个连接。
通过连接,调试器应用程序或目标 VM 都可以充当服务器。进程之间的通信可以在同一个机器或不同的机器上运行。

Eclipse 中的远程调试特性
  在 Ganymede 中共有两个连接器:
    Socket Attach
    Socket Listen
  对于监听套接字的连接器,Eclipse VM 将是与远程 Java 应用程序连接的主机。
  对于连接套接字的连接器,目标 VM 将作为主机。
  这两种连接器对应用程序调试没有影响,用户可以任意选择。
  但根据经验,需要使用速度更快、更强大的计算机作为 VM 调主机,因为需要计算的资源很多。

两种远程调试应用程序的方式:
  1.远程调用 Java 应用程序作为调试服务器,并在端口 8000 监听套接字连接。
    此时目标 VM 先启动并暂停,直到调试器连接。
    目标VM启动命令范例:
      java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address="8000" -jar HelloWorld.jar
  2.使用一个简单的 Java 应用程序作为调试客户机,并且调试器前端作为调试服务器。
    此时Eclipse 使用套接字监听模式连接类型进行监听。必须先启动调试前端来监听特定的端口。
    目标VM启动命令范例:
      java -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8000,suspend=y -jar test.jar

参考:
https://www.ibm.com/developerworks/cn/opensource/os-eclipse-javadebug/

posted @ 2012-03-11 14:40  万法自然~  阅读(321)  评论(0编辑  收藏  举报