使用 WebSphere Studio Application Developer 调试器调试 WebSphere 应用: 第 2 部分

介绍
在本系列的 第 1 部分中,我们介绍了新的 WebSphere™Studio Application Developer 调试器以及如何在不同的测试情形下使用它。

在本文中,我们将向您展示如何配置 WebSphere Studio Application Developer 来调试已经部署到主机的 WebSphere Application Server,高级版(AE)上的应用程序。在对部署进行测试时,这一点很有用,并展示了 WebSphere Studio Application Developer 的调试器作为 远程调试器的新功能。您可以采用 Joe Winchester 所写的文章 调试在 WebSphere Application Server 内运行的 Java 代码描述的类似步骤,使用独立的 IBM 远程调试器(IBM Remote Debugger)在 WebSphere Application Server,高级单服务器版(Advanced Single Server Edition(AEs))上调试应用程序。我们决定在本文中不做那些工作,因为 WebSphere Studio Application Developer 支持将 AEs 用作测试服务器,而且也提供动态发布。

我们假设您已经知道如何运行 Application Server 并且了解 Application Server 管理的基础知识。

如果您以前使用 IBM 远程调试器调试过 WebSphere Application Server AE,则您可以跳过本文的第一部分,因为它是以前的文章,WebSphere 开发者园地上 Joe Winchester 所写的 调试在 WebSphere Application Server 内运行的 Java 代码的重复。

配置 Application Server 以在调试模式中运行
在 WebSphere Application Server AE 上进行的调试是以每个应用程序服务器为基础的。这允许您把一个特定的应用程序服务器设置成远程调试,而其它应用程序服务器可以有不同设置。

  1. 从 WebSphere 管理控制台单击您想远程调个试的应用程序服务器(application server)。
  2. 这样做之后,该应用程序服务器的设置将立刻出现在窗口的右边较下部分,如下面的图 1 所示。选择 JVM settings窗格。
  3. 图 1. Application server 属性
    Application server 属性

  4. 从 JVM settings 窗格单击 Advanced JVM Settings...。要实际看到这个按钮,您得向下滚屏。
  5. 在如下所示的新打开的对话框中,确保您选择了以下设置:
    1. Enable Debug Mode被选中。
    2. Enable IBM Distributed Debugger未被选中。
    3. Disable JIT被选中。最新的 WebSphere Application Server 会自动禁用 JIT。使用 JIT 将启用代码优化,按照定义,代码优化将改变行号并导致所有调试器失效。
    4. 在测试域 Debug String输入以下字符串。请注意,“nnnn”是您所选择的端口号。您可以查看 调试字符串意义说明部分获得关于端口号的更多信息。
      
      
      -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=nnnn
      
                          
    5. 单击 OK

      图 2. Advanced JVM settings
      Advanced JVM settings

      调试字符串意义说明

      -Xrunjdwp:transport=dt_socket 这个字符串告诉调试器使用套接字作为它的传输机制。调试器将能够使用开放套接字来侦听客户机。另一个可能的值是 dt_shmem ,如果调试器和 Application server 在同一台机器上运行,它就用共享内存代替套接字传输。
      server=y JVM 作为可调试的服务器运行,并且调试客户机可以连接到 JVM。
      suspend=n 当您开始运行时,服务器不应暂挂。
      重要信息:如果您使用 suspend=y ,则 application server 将在执行开始时暂挂并等待,直到调试器连到该应用程序服务器上,接着您才可以从调试器恢复 application server 的运行。如果 Servlet 或 EJBs? 被配置成在服务器启动的时候装入,并且您想调试这些代码,这就会变得很方便。通过将 suspend 设置为 y,您就为自己留下了在恢复服务器启动前进行连接调试器和设置断点等操作的时间。
      address=nnnn 请勿输入 nnnn ,而要输入您选择的一个号码。这个号码将是一个端口号,调试器引擎将侦听这个端口号,等待调试器接口钩(hook)上来。一个常见的错误是使用 8080 或 9080 端口,这两个端口总是处于忙状态。在 NT 机器上,您可以发出命令 netstat -a> usedports.txt ,然后搜索 usedports.txt 文件找出哪些端口正在使用中并避开它们。您可以在您正在使用的任何平台上使用类似的命令。在这个样本中,我使用了 0371,这个端口在我的机器上一直是闲着的。
      在 Sun Java Web 站点上可找到更多信息。查找 Java Platform Debugger Architecture(JPDA)文档,您将在 Connection and Invocation Details部分找到这些参数的详细信息。
  6. 确保单击了 Apply,以使对应用程序的更改生效。
  7. 您的管理屏幕应向您显示您所选择的设置,如下面的图 3 所示。现在,您应以调试模式启动您的应用程序。

    图 3. 完成后的 JVM 设置
    完成后的 JVM 设置

将调试器连到 Application Server AE 上
要使用 WebSphere Studio Application Developer 来调试应用程序,您必须在您的一个工作区工程中调试应用程序代码,并采取这些简单步骤。

  1. 确保您正尝试调试的应用程序的 EAR 被装入到了您的工作区。按我的经验,即使源文件中包含有一些由于没找到所引用的库而产生的错误,仍然可以调试它们。请记住,这个应用程序实际运行在远程服务器上。
  2. 在应用程序中您想调试的地方插入断点。您可以象本系列的 第一篇文章所描述的那样,将断点插入到 EJB 代码或 Servlet 中。
    注:您目前不能调试 JSPs?,因为本质上它们是在编译时生成的,而且我们正在使用标准 Java 调试 API 的 JSP。
  3. 单击紧靠 Debug Menu( Debug Menu 按钮)按钮的下拉箭头。
  4. 选择菜单项 Debug => Remote Java Application,如下面的图 4 所示。

    图 4. 调试远程应用程序菜单
    调试远程应用程序菜单

  5. 在对话框指定您的主机名和端口号,如下面的图 5 所示。 Port号是您在前面的调试字符串中所指定的那个 nnnn号。

    图 5. 调试服务器对话框
    调试服务器对话框

  6. 单击 Finish,您将注意到,在 Debug 透视图中显示一个“classic”VM 正在运行。请参看下面的图 6。这是您的 WebSphere Application Server 应用程序。

    图 6. 调试远程服务器进程列表
    调试远程服务器进程列表

一旦您的应用程序显示在了调试器中,您就可以实际看看 Breakpoints 视图。您将看到可用的断点用绿色的点突出显示,而不可用(即应用程序之外或 JSP 中的若干个 Java 文件)的断点则用蓝色的点标示。请参看下面的图 7。

图 7. Breakpoints 列表
Breakpoints 列表

从此之后,您就可以调试应用程序,就好象它是在 WebSphere Studio Application Developer 内的 WebSphere 测试环境(TestEnvironment)内运行一样。

结束语
WebSphere Studio Application Developer 调试器利用了 Java Platform Debugger Architecture(JPDA)所提供的实用工具,以允许开发者调试远程应用程序。对于 WebSphere Application Server,它提供了优秀的实用程序,用来研究仅发生在服务器端上的问题。当部署环境在不同的机器上或者是在放在一起的不同操作系统上时,更是如此。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值