使用 WebSphere Studio Application Developer 调试器调试 WebSphere 应用程序.docx

上传人:b****6 文档编号:6380641 上传时间:2023-01-05 格式:DOCX 页数:16 大小:490.27KB
下载 相关 举报
使用 WebSphere Studio Application Developer 调试器调试 WebSphere 应用程序.docx_第1页
第1页 / 共16页
使用 WebSphere Studio Application Developer 调试器调试 WebSphere 应用程序.docx_第2页
第2页 / 共16页
使用 WebSphere Studio Application Developer 调试器调试 WebSphere 应用程序.docx_第3页
第3页 / 共16页
使用 WebSphere Studio Application Developer 调试器调试 WebSphere 应用程序.docx_第4页
第4页 / 共16页
使用 WebSphere Studio Application Developer 调试器调试 WebSphere 应用程序.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

使用 WebSphere Studio Application Developer 调试器调试 WebSphere 应用程序.docx

《使用 WebSphere Studio Application Developer 调试器调试 WebSphere 应用程序.docx》由会员分享,可在线阅读,更多相关《使用 WebSphere Studio Application Developer 调试器调试 WebSphere 应用程序.docx(16页珍藏版)》请在冰豆网上搜索。

使用 WebSphere Studio Application Developer 调试器调试 WebSphere 应用程序.docx

使用WebSphereStudioApplicationDeveloper调试器调试WebSphere应用程序

介绍

2001年,IBM为开放源代码社区引入了Eclipse平台,以努力使其产品的工具对第三方产品更加开放,同时也努力对平台进行总体上的加强。

作为这个战略的一部分,IBM现在提供了一套新工具,用来构建基于Eclipse平台的企业Java™应用程序。

这套新工具称为WebSphere™StudioApplicationDeveloper,它集成了一个基于Java的调试器来作为它自己的调试器。

这给我们带来了很大的好处,因为我们不必再使用两个调试器。

VisualAge™forJava由一个在VisualAgeforJava内进行调试的内部调试器和一个用于调试远程服务器的IBM远程调试器(IBMRemoteDebugger)组成。

现在我们可以使用一个调试器,它可以满足您的全部需要,并且具有IBM一贯提供的丰富的功能。

我们打算在两篇文章中向您介绍这个调试器。

我们假设读者熟练掌握了J2EE、WebSphereStudioApplicationDeveloper开发和部署的基础知识。

在这篇文章中,我们通过在WebSphereStudioApplicationDeveloper内使用EJB、Servlet和JSPs™,向您介绍如何使用这个调试器及其某些基本/集成功能来调试Java应用程序。

我们将采取一种实际操作的办法介绍一个简单的Web应用程序,这个应用程序存在几个相互嵌套的问题(一个问题在JSP代码中,一个问题在Servlet代码中,还有一个问题在EJB代码中),我们将使用这个调试器发现和修正全部三个问题。

在第2部分中,我们将说明,把应用程序部署到WebSphereApplicationServer,高级版(AdvancedEdition(AE))之后,如何使用WebSphereStudioApplicationDeveloper来调试它。

下面的可下载文件,DebugInWSADpt1.zip,包含有本文所描述的类和归档。

调试一个简单的Java应用程序

在调试器中启动您的应用程序

1.切换到(或打开)一个Java透视图。

2.创建一个新的Java工程并将之称为TestDebug。

3.将样本Java应用程序testdebug.jar文件导入到TestDebug工程。

4.请检查poc.debug.app.AppDebug.java。

它是一个简单的应用程序,我们将用它来演示调试器的基础知识。

5.插入一个断点到main方法中的循环内的以下语句:

x=y+z;

要这样做,您可以双击源代码的左窗格,或使用弹出菜单,如下面的图1所示。

6.

图1.向源代码添加断点

7.在工具栏中,单击Debug(

)按钮。

您将看到一个对话框,询问您想使用哪一个启动程序。

选择JavaApplication,选中Setasdefaultlauncher...复选框,然后单击Next。

运行应用程序的另一个按钮是Run(

)按钮。

这个按钮在非调试JavaJVM中运行应用程序,这种JVM的执行速度更快,但不允许调试或使用断点。

这是WebSphereStudioApplicationDeveloper和VisualAgeforJava之间的根本不同之处,VisualAgeforJava在它自己的JVM中运行所有应用程序,并且总是在调试模式中。

而WebSphereStudioApplicationDeveloper则使用可插式JVM,并且您可以选择是否要在调试模式中运行。

8.选择您想测试的类。

WebSphereStudioApplicationDeveloper给您一个选项,让您选择要用应用程序启动程序(ApplicationLauncher)启动的、在同一个工程中的一组类。

9.这个启动程序将启动另一个JVM进程来运行您的应用程序(看一下WindowsTaskManager,其中将显示一个额外的javaw进程,并且将出现一个带AppDebug.java源代码的Debug视图。

现在让我们停下来,快速看一下我们在调试模式中可以使用的不同视图和功能。

调试器透视图和调试器任务

Debug/Process/Navigator视图

Debug视图显示当前线程、先前终止的线程、执行堆栈和停止时所在的当前断点。

请注意,正是这个debug视图带有这些熟悉的按钮:

Step、Stepinto、Stepout、Run、Suspend和其它调试控制按钮。

单击Process窗格将向您显示当前进程,系统正在用来运行这个应用程序的可执行文件(在我们的案例中是javaw)。

Navigator窗格只是一个浏览器,它允许您全面浏览代码,而且不用离开调试透视图就可以再多设置些断点。

图2.Debug/Process/Navigator视图

Breakpoint/Inspector/Variables/Inspector视图

这个视图的缺省窗格是Breakpoints视图,您将在其中看到程序中可用断点的列表。

您也可以在一个断点上单击鼠标右键并从弹出菜单中选择HitCount,它告诉调试器在一定数量的命中后停止。

如果你想让循环停止于某次迭代,在这样的循环内设置断点,这很有用。

把您的断点的HitCount设置为2。

如果您在Variable窗格上单击,那么您将有机会看见可用的变量以及它们的值。

在任何变量上单击鼠标右键,您都将得到以下选项:

∙Inspect--variables视图可能包含许多变量。

inspector视图允许您集中在感兴趣的少量变量上。

∙ChangeValue--这是一个非常重要的功能。

当您选择这个选项时,您将可以改变所选定的变量的值,并可以研究这一改变对程序执行的影响。

∙ShowTypeNames--这个选项显示变量的类型。

∙ShowQualifiedNames--这个选项允许您看到变量类型的全限定名。

图3.Breakpoint视图

图4.Variables视图

单击Run(

)按钮,您将注意到执行将在断点处停止。

检查count变量和其它变量的值,确认程序执行在循环的第二次迭代处停止。

这是我们前面设置的命中计数(hitcount)。

Code、Outline和Tasks/Console视图

Code和outline视图跟您在其它透视图中看到过的视图是相同的。

tasks视图也一样,它与Console视图共享同一个窗格。

这个调试器的优秀功能之一是可以运行到代码的某个点上。

例如,如果我们现在想运行到并停止在循环后面紧跟的语句上,则我们可以在code视图中,在该语句上单击鼠标右键并选择RuntoLine。

当您单步执行(step-over)该语句时,程序在console视图中输出x的值。

请注意console视图如何自动变成活动的窗格。

这是console视图的缺省行为,每次您输出一些内容时,console视图都会变成活动的。

您可以从Preferences对话框的Debug窗格改变这种行为和console视图中的输出格式。

在运行调试器时修改代码(热修改)

在VisualAgeforJava中,我们有了“热方法编译(hotmethodcompiling)”功能。

这意味着我们可以在调试一个方法时修改该方法内的代码,调试器会自动跳回到执行块的开头,我们可以继续调试而无需重新运行应用程序。

这是一个可用于VisualAgeforJavaJVM(我们称它为“J9”类JVM)的功能。

这个功能在标准JVM(例如:

WebSphereStudioApplicationDeveloper附带的JVM)中是没有的。

这个新工具确实虑及了在您修改WebSphereApplicationServer中的Servlet后重新装入它。

这保证了这个Servlet方法的第二次执行将反映您的最新修改。

Servlet/JSP的调试

要演示编译器调试Servlet/JSP的功能,请将TestEAR.ear文件装入到名为TestEAR的工程。

如果您遇到了任何编译错误,请确保刚刚创建的AdderEJB工程在AdderWEB工程的类路径中。

理解Adder企业应用程序

我们构建了一个名为poc.debug.ejbs.AdderSession的会话EJB,它提供strCat方法,这个方法使用内存缓冲区(在Java中将字符串连接起来的快速的、推荐的办法)将两个字符串连接起来。

我们还有一个围绕我们的会话bean的访问bean--poc.debug.ejbs.AdderSessionAccessBean。

我们使用WebSphereStudioApplicationDeveloper构建访问这个访问bean的Web,它生成如下内容:

∙poc.debug.Servlet.AdderController--一个Servlet,它将表单的输入导到输出JSP。

∙poc.debug.Servlet.AdderViewBean--这个bean封装调用访问Bean的strCat的逻辑,然后将结果传回到调用者。

∙AdderInputForm.html--这是一张输入表单,它接受用户输入并调用AdderControllerServlet。

∙AdderResults.jsp--这是JSP结果页,它使用AdderViewBean显示结果。

配置/运行应用程序

1.创建WebSphere4.0测试实例/配置(TestInstance/Configuration)并命名为TU(测试单元(TestUnit))。

2.在TU的Configuration中,单击鼠标右键并将TestEAREAR添加到配置中。

3.从Servers视图选择TU服务器并单击Run(

)按钮。

4.在您的Web浏览器中,输入:

http:

//localhost:

8080/Adder/

5.这应自动装入AdderInputForm.html,因为它被配置为一个欢迎页面。

6.在输入表单中,输入任意两个字符串,单击Submit并注意结果。

7.您应得到404errorfilenotfoundAddResultX。

停止服务器,让我们找出如何使用这个调试器来定位这个问题。

调试Servlet

1.在Java或Web透视图中,打开AdderWeb工程并定位到AdderController.performTask()方法。

2.在try块的第一行:

performServices(request,response);,设置一个断点。

3.现在再次启动服务器,但这次请单击Debug(

)按钮,这样服务器将以调试模式启动,并启用了断点。

4.将AdderInputForm.html重新装入到Web浏览器。

5.在输入表单的两个域中输入任意两个字符串并单击Submit。

6.您会注意到Server透视图变成活动的了,您将可以在其中进行调试。

在server透视图中,您将注意到的第一件事是,Debug、Console和Variables窗格共享同一个窗口!

由于在您单步遍历执行(stepthrough)代码的过程中,每当需要检查变量值时都要切换窗口,所以这可能不太方便。

这个问题的解决办法是,或者自己重新安排这些server视图,或者在Debug视图中进行调试,Debug视图更适合于这个过程。

在Debugger透视图中进行调试有两种方式。

第一种容易的方式是在命中代码中的断点之前手工切换到debugger透视图。

这并非总是容易的。

比如说,您在HttpServlet.init()方法(被设置为在启动时自动装入)中设置了一个断点。

所以,现在我们将向您展示如何在Debug透视图中调试服务器,即使您在该服务器或任何其它透视图中获取了断点。

7.切换到Debug透视图

8.在Debug视图中,首先定位到Server进程,如下面的图5所示。

9.

图5.Debug进程视图

10.在运行在server之下的线程的列表中,定位到列表底端附近的线程,也就是紧靠着底端的Suspended(breakpoint...,如下面的图6所示。

如上面的图5所示,由于有+号紧靠着它,定位这个线程显然很容易。

如果展开这个线程,您将看到执行堆栈。

11.

图6.debug视图中的暂挂进程

12.双击该堆栈的顶部,您将在Debug透视图中看到源代码。

13.单步遍历执行您的Servlet代码。

您将看到,我们将变量nextPage的值手工设置为AddResultX。

我们应使用getInitParameters()方法取代它。

14.将代码中的如下一行注释掉:

nextPage="AddResultx";

15.取消对下面这一行(这一行包含正确的代码)的注释:

//nextPage=getInitParameter(request.getParameter("command"));

16.保存Servlet。

前面已经提到过,WebSphereApplicationServer4.0能够自动重新装入Servlet和JSP,所以,您不必在每次更改Servlet或JSP时都重新启动服务器。

17.考虑到实际操作问题,由于我们将不再需要Servlet中的断点,如果您将它除去/禁用,事情将变得更加容易。

18.将输入屏重新装入到Web浏览器。

输入一些值并单击Submit。

19.这次您应得到正确的JSP页面,但打印出来的值是null值。

下一步是调试JSP,看看我们是否有可能进一步修正问题。

调试JSP

1.在您的Web透视图或任何其它透视图中,浏览到AdderResults.jsp文件并打开它。

2.在source窗格中单击,观察这个JSP的源代码。

3.请注意,有Java调用的第一行在第48行。

它的样子象这样:

Stringst1=newjava.lang.String(request.getParameter("str21"));

4.在此行的下一行单击鼠标右键并选择AddBreakpoint。

5.将AdderInputForm.html重新装入到Web浏览器。

6.在输入表单的两个域中输入任意两个字符串并单击Submit。

7.回到debug透视图(如前一部分所述)。

8.单步跳过(stepover)开头两个语句,验证变量str1和str2是否保存了您输入到HTML表单的值。

9.然后,在第50行单击Step-into(

)按钮。

这将把您带到AdderViewbean的代码中。

10.一旦您处在了AdderView源代码中,您将意识到我们正在调用错误的方法。

我们本应该调用AdderView.strCat()方法,而不是AdderView.badStrCat()。

11.所以,现在您将需要回到您的JSP文件,编辑第50行并将它修改为:

Stringmethod0=AdderBean.StrCat(st1,st2);

12.保存JSP。

切勿除去断点(我们将需要它来演示客户机调试和EJB)。

13.重新装入您的输入表单。

在两个域中输入两个不同的值。

例如:

“Hello”和“World”,单击submit。

14.现在,您将注意到null已经消失,但我们将得到第一个字符串与它自身连接在一起形成的字符串。

要修正这一错误,我们将需要再次调试对EJB的JSP调用。

EJB的调试

我们使用EJB访问bean来访问负责完成字符串连接的会话bean。

试图单步跳入(stepinto)对EJB的调用将使我们陷入一片混乱的存根和服务器所生成的代码。

在象这样的情况下,在可能发生问题的调用中的EJB上设置断点是常见的做法。

在我们的例子中是AdderSessionBean.StrCat()。

1.在Java或J2EE透视图中,从AdderEJB工程打开poc.debug.ejbs.AdderSessionBean.java。

2.在StrCat方法的第一个执行行添加一个断点。

3.重新装入您的输入表单。

在两个域中输入两个不同的值(即“Hello”和“World”)并单击Submit。

4.您将首先命中JSP中的断点。

单步跳过前两行,然后单步跳入行号50。

5.在AdderView.StrCat方法中,单步跳过这个样子的行:

ret=bean.StrCat(str1,str2);

请注意,在这个案例中,在应用程序服务器(AppServer)空间中运行的AdderViewbean实际就是我们的EJB的客户机,不过,在这个特定的案例中,它们共享同一个JVM。

所以,如果您在Process视图查看执行堆栈内部,您将注意到它们是在同一个进程上运行。

另一个客户机(在EJBclient.zip中)可以用作独立Java应用程序,用来测试您的EJB。

当您把这个客户机添加到任何Java工程中时,请确保您把下列内容添加到了工程的构建路径。

6.

oj2ee.jar*

oijvejb35.jar*

oAdderEJB工程

(*)这些文件可在\plugins\com.ibm.etools.websphere.runtime\lib目录找到。

当您调试这个应用程序时,您将注意到两个重要事实:

o存在两个独立的进程。

一个用于应用程序,一个用于EJB服务器。

o在您的代码的执行过程中,WebSphereStudioApplicationDeveloper调试器有从一个JVM到另一个JVM来回切换的强大能力。

7.单击Step-over(

)按钮,您会注意到调试器将在EJBStrCat方法内的断点处停止。

8.单步遍历执行EJB,您将认识到错误。

我们只是把str1连接了两次,根本没使用str2。

9.修正这个问题并保存代码。

10.您将需要重新启动服务器以刷新EJB代码。

别忘了要在调试模式中启动它。

与Servlet和JSP的情况不同,当您修改了您的EJB中的代码时,WebSphere4.0将要求重新装入服务器。

11.重新装入您的输入表单,输入数据,跟踪您的代码到EJB语句。

12.验证sf变量是否确实带有正确的值。

请注意,如果您从EJB单击Return(

)按钮,则您将运行回到服务器生成的EJB类。

为了避免发生这样的事情,在堆栈中选择JSP调用就行了,如下面的图7所示。

然后,您可以使用Step-over(

)按钮并继续执行JSP文件。

13.

图7.选择了JSP的Debug进程视图

14.验证返回字符串是否带有正确的值(您输入的字符串的连接)。

现在,您成功地完成了存在问题的Servlet、JSP和EJB代码的调试。

结束语

到目前为止,我们在这篇实际操作的文章中所做的是,向您展示在不同的情形下如何使用WebSphereStudioApplicationDeveloper开发环境调试Java应用程序、Servlet、JSP和EJB。

在下一篇文章中,我们将向您展示如何使用WebSphereStudioApplicationDeveloper调试器调试在WebSphereAE的远程实例中运行的应用程序。

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

在本文中,我们将向您展示如何配置WebSphereStudioApplicationDeveloper来调试已经部署到主机的WebSphereApplicationServer,高级版(AE)上的应用程序。

在对部署进行测试时,这一点很有用,并展示了WebSphereStudioApplicationDeveloper的调试器作为远程调试器的新功能。

您可以采用JoeWinchester所写的文章调试在WebSphereApplicationServer内运行的Java代码描述的类似步骤,使用独立的IBM远程调试器(IBMRemoteDebugger)在WebSphereApplicationServer,高级单服务器版(AdvancedSingleServerEdition(AEs))上调试应用程序。

我们决定在本文中不做那些工作,因为WebSphereStudioApplicationDeveloper支持将AEs用作测试服务器,而且也提供动态发布。

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

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

 

配置ApplicationServer以在调试模式中运行

在WebSphereApplicationServerAE上进行的调试是以每个应用程序服务器为基础的。

这允许您把一个特定的应用程序服务器设置成远程调试,而其它应用程序服务器可以有不同设置。

1.从WebSphere管理控制台单击您想远程调个试的应用程序服务器(applicationserver)。

2.这样做之后,该应用程序服务器的设置将立刻出现在窗口的右边较下部分,如下面的图1所示。

选择JVMsettings窗格。

3.

图1.Applicationserver属性

4.从JVMsettings窗格单击AdvancedJVMSettings...。

要实际看到这个按钮,您得向下滚屏。

5.在如下所示的新打开的对话框中,确保您选择了以下设置:

a.EnableDebugMode被选中。

b.EnableIBMDistribut

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1