版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、介绍2001年,IBM为开放源代码社区引入了Eclipse平台,以努力使其产品的工具对第三方产品更加开放,同时也努力对平台进行总体上的加强。作为这个战略的一部分,IBM现在提供了一套新工具,用来构建基于Eclipse平台的企业Java应用程序。这套新工具称为WebSphereTstudioApplicationDevelope,它集成了一个基于Java的调试器来作为它自己的调试器。这给我们带来了很大的好处,因为我们不必再使用两个调试器。VisualAgeTMforJava由一个在VisualAgeforJava内进行调试的内部调试器和一个用于调试远程服务器的IBM远程调试器(IBMRemote
2、Debugger)组成。现在我们可以使用一个调试器,它可以满足您的全部需要,并且具有IBM一贯提供的丰富的功能。我们打算在两篇文章中向您介绍这个调试器。我们假设读者熟练掌握了J2EE、WebSphereStudioApplicationDeveloper开发和部署的基础知识。在这篇文章中,我们通过在WebSphereStudioApplicationDeveloper内使用EJB、Servlet和JSPs,向您介绍如何使用这个调试器及其某些基本/集成功能来调试Java应用程序。我们将采取一种实际操作的办法介绍一个简单的Web应用程序,这个应用程序存在几个相互嵌套的问题(一个问题在JSP代码中,
3、一个问题在Servlet代码中,还有一个问题在EJB代码中),我们将使用这个调试器发现和修正全部三个问题。在第2部分中,我们将说明,把应用程序部署到WebSphereApplicationServer,高级版(AdvaneedEdition(AE)之后,如何使用WebSphereStudioApplicationDeveloper来调试它。下面的可下载文件,DebugInWSADpt1.zip,包含有本文所描述的类和归档。调试一个简单的Java应用程序在调试器中启动您的应用程序切换到(或打开)一个Java透视图。创建一个新的Java工程并将之称为TestDebug。将样本Java应用程序tes
4、tdebug.jar文件导入到TestDebug工程。请检查poc.debug.app.AppDebug.java。它是一个简单的应用程序,我们将用它来演示调试器的基础知识。插入一个断点到main方法中的循环内的以下语句:x=y+z;要这样做,您可以双击源代码的左窗格,或使用弹出菜单,如下面的图1所示。6.图1.向源代码添加断点在工具栏中,单击Debug(膨IR)按钮。您将看到一个对话框,询问您想使用哪一个启动程序。选择JavaApplication,选中Setasdefaultlauncher.复选框,然后单击Next。运行应用程序的另一个按钮是Run(兴*)按钮。这个按钮在非调试JavaJ
5、VM中运行应用程序,这种JVM的执行速度更快,但不允许调试或使用断点。这是WebSphereStudioApplicationDeveloper和VisualAgeforJava之间的根本不同之处,VisualAgeforJava在它自己的JVM中运行所有应用程序,并且总是在调试模式中。而WebSphereStudioApplicationDeveloper则使用可插式JVM,并且您可以选择是否要在调试模式中运行。选择您想测试的类。WebSphereStudioApplicationDeveloper给您一个选项,让您选择要用应用程序启动程序(ApplicationLauncher)启动的、在
6、同一个工程中的一组类。这个启动程序将启动另一个JVM进程来运行您的应用程序(看一下WindowsTaskManager,其中将显示一个额外的javaw进程,并且将出现一个带AppDebug.java源代码的Debug视图。)现在让我们停下来,快速看一下我们在调试模式中可以使用的不同视图和功能。调试器透视图和调试器任务Debug/Process/Navigator视图Debug视图显示当前线程、先前终止的线程、执行堆栈和停止时所在的当前断点。请注意,正是这个debug视图带有这些熟悉的按钮:Step、Stepinto、Stepout、Run、Suspend和其它调试控制按钮。单击Process窗
7、格将向您显示当前进程,系统正在用来运行这个应用程序的可执行文件(在我们的案例中是javaw)。Navigator窗格只是一个浏览器,它允许您全面浏览代码,而且不用离开调试透视图就可以再多设置些断点。图2.Debug/Process/Navigator视图,terminated?AppDebugJavaApplicatior:!AppDebugJavaApplication-AppDebugatlocalhost:5463坯.SystemThreadFinaljzer(Running坯.SystemThreadReferenceHandler(Running)铅SystemThreadSigna
8、ldispatcher(Running)-舉Threadmain(Suspended(breakpointatline10inAppDebugAppDebug.mairifStringline:1DNavigatorProcessesDebugBreakpoint/Inspector/Variables/Inspector视图这个视图的缺省窗格是Breakpoints视图,您将在其中看到程序中可用断点的列表。您也可以在一个断点上单击鼠标右键并从弹出菜单中选择HitCount,它告诉调试器在一定数量的命中后停止。如果你想让循环停止于某次迭代,在这样的循环内设置断点,这很有用。把您的断点的HitC
9、ount设置为2。如果您在Variable窗格上单击,那么您将有机会看见可用的变量以及它们的值。在任何变量上单击鼠标右键,您都将得到以下选项:Inspect-variables视图可能包含许多变量。inspector视图允许您集中在感兴趣的少量变量上。ChangeValue-这是一个非常重要的功能。当您选择这个选项时,您将可以改变所选定的变量的值,并可以研究这一改变对程序执行的影响。ShowTypeNames-这个选项显示变量的类型。ShowQualifiedNames-这个选项允许您看到变量类型的全限定名。图3.Breakpoint视图图4.Variables视图单击Run()按钮,您将注意
10、到执行将在断点处停止。检查count变量和其它变量的值,确认程序执行在循环的第二次迭代处停止。这是我们前面设置的命中计数(hitcount)。Code、Outline和Tasks/Console视图Code和outline视图跟您在其它透视图中看到过的视图是相同的。tasks视图也一样,它与Console视图共享同一个窗格。这个调试器的优秀功能之一是可以运行到代码的某个点上。例如,如果我们现在想运行到并停止在循环后面紧跟的语句上,则我们可以在code视图中,在该语句上单击鼠标右键并选择RuntoLine。当您单步执行(step-over)该语句时,程序在console视图中输出x的值。请注意c
11、onsole视图如何自动变成活动的窗格。这是console视图的缺省行为,每次您输出一些内容时,console视图都会变成活动的。您可以从Preferences对话框的Debug窗格改变这种行为和console视图中的输出格式。在运行调试器时修改代码(热修改)在VisualAgeforJava中,我们有了热方法编译(hotmethodcompiling)”功能。这意味着我们可以在调试一个方法时修改该方法内的代码,调试器会自动跳回到执行块的开头,我们可以继续调试而无需重新运行应用程序。这是一个可用于VisualAgeforJavaJVM(我们称它为J9类JVM)的功能。这个功能在标准JVM(例如
12、:WebSphereStudioApplicationDeveloper附带的JVM)中是没有的。这个新工具确实虑及了在您修改WebSphereApplicationServer中的Servlet后重新装入它。这保证了这个Servlet方法的第二次执行将反映您的最新修改。Servlet/JSP的调试要演示编译器调试Servlet/JSP的功能,请将TestEAR.ear文件装入到名为TestEAR的工程。如果您遇到了任何编译错误,请确保刚刚创建的AdderEJB工程在AdderWEB工程的类路径中。理解Adder企业应用程序我们构建了一个名为poc.debug.ejbs.AdderSessio
13、n的会话EJB,它提供strCat方法,这个方法使用内存缓冲区(在Java中将字符串连接起来的快速的、推荐的办法)将两个字符串连接起来。我们还有一个围绕我们的会话bean的访问bean-poc.debug.ejbs.AdderSessionAccessBean。我们使用WebSphereStudioApplicationDeveloper构建访问这个访问bean的Web,它生成如下内容:poc.debug.Servlet.AdderController-一个Servlet,它将表单的输入导到输出JSP。poc.debug.Servlet.AdderViewBean-这个bean封装调用访问Be
14、an的strCat的逻辑,然后将结果传回到调用者。AdderInputForm.html-这是一张输入表单,它接受用户输入并调用AdderControllerServlet。AdderResults.jsp-这是JSP结果页,它使用AdderViewBean显示结果。配置运行应用程序创建WebSphere4.0测试实例/配置(TestInstance/Configuration)并命名为TU(测试单元(TestUnit)。在TU的Configuration中,单击鼠标右键并将TestEAREAR添加到配置中。从Servers视图选择TU服务器并单击Run(艺:一)按钮。.1.2.
15、.0.11.在您的Web浏览器中,输入: HYPERLINK http:/localhost:8080/Adder/ http:/localhost:8080/Adder/这应自动装入AdderInputForm.html,因为它被配置为一个欢迎页面。在输入表单中,输入任意两个字符串,单击Submit并注意结果。您应得到404errorfilenotfoundAddResultX。停止服务器,让我们找出如何使用这个调试器来定位这个问题。调试Servlet在Java或Web透视图中,打开AdderWeb工程并定位到AdderController.performTask
16、()方法。在try块的第一行:performServices(request,response);,设置一个断点。现在再次启动服务器,但这次请单击Debug(鈞)按钮,这样服务器将以调试模式启动,并启用了断点。将AdderInputForm.html重新装入到Web浏览器。在输入表单的两个域中输入任意两个字符串并单击Submit。您会注意到Server透视图变成活动的了,您将可以在其中进行调试。在server透视图中,您将注意到的第一件事是,Debug、Console和Variables窗格共享同一个窗口!由于在您单步遍历执行(stepthrough)代码的过程中,每当需要检查变量值时都要切换
17、窗口,所以这可能不太方便。这个问题的解决办法是,或者自己重新安排这些server视图,或者在Debug视图中进行调试,Debug视图更适合于这个过程。在Debugger透视图中进行调试有两种方式。第一种容易的方式是在命中代码中的断点之前手工切换到debugger透视图。这并非总是容易的。比如说,您在HttpServlet.init()方法(被设置为在启动时自动装入)中设置了一个断点。所以,现在我们将向您展示如何在Debug透视图中调试服务器,即使您在该服务器或任何其它透视图中获取了断点。切换到Debug透视图在Debug视图中,首先定位到Server进程,如下面的图5所示。图5.Debug进程
18、视图ni!hWebSphereiigryprproce?atIcrtalhost:14538-雜頤unkncivynaServerLauncher趨SystemThreadFinalizer(Running)QaSystemThreadReferenceHandler(Running).”Cl.jo+amr4iorio+Koe1iLirhifM、在运行在server之下的线程的列表中,定位到列表底端附近的线程,也就是紧靠着底端的Suspended(breakpoint.,如下面的图6所示。如上面的图5所示,由于有+号紧靠着它,定位这个线程显然很容易。如果展开这个线程,您将看到执行堆栈。12.1
19、..1.12.13.图6.debug视图中的暂挂进程坯ThreadSerylet.Engine.Transports:8(Running)邑Thfemcl啓eFwlet.Erigirie.TVmr/Uportm:gRLnriirig).-ThreadEer*let.Engine.TrangpcirtsdCiugpencieci(bre日kwintatline66inAdderController:)I三AdderCortroller.performTasktl-litpSevletRequesf!HttpServl
20、etR&spons6).lin三AdderCortroller.doPositHttpServJetRsquesi!HttpServletResponse)line:88血“cydlryFLJ+中m;rrLJ441口ce,LJ+中IC1j.j-.tr.jilLI双击该堆栈的顶部,您将在Debug透视图中看到源代码。单步遍历执行您的Servlet代码。您将看到,我们将变量nextPage的值手工设置为AddResultX。我们应使用getInitParameters()方法取代它。将代码中的如下一行注释掉:nextPage=AddResultx;取消对下面这一行(这一行包含正确的代码)的注释:/
21、nextPage=getInitParameter(request.getParameter(command);保存Servlet。前面已经提到过,WebSphereApplicationServer4.0能够自动重新装入Servlet和JSP,所以,您不必在每次更改Servlet或JSP时都重新启动服务器。考虑到实际操作问题,由于我们将不再需要Servlet中的断点,如果您将它除去禁用,事情将变得更加容易。将输入屏重新装入到Web浏览器。输入一些值并单击Submit。这次您应得到正确的JSP页面,但打印出来的值是null值。下一步是调试JSP,看看我们是否有可能进一步修正问题。调试JSP在您
22、的Web透视图或任何其它透视图中,浏览到AdderResults.jsp文件并打开它。在source窗格中单击,观察这个JSP的源代码。请注意,有Java调用的第一行在第48行。它的样子象这样:Stringst1=newjava.lang.String(request.getParameter(str21);在此行的下一行单击鼠标右键并选择AddBreakpoint。将AdderInputForm.html重新装入到Web浏览器。在输入表单的两个域中输入任意两个字符串并单击Submit。回到debug透视图(如前一部分所述)。单步跳过(stepover)开头两个语句,验证变量strl和str2
23、是否保存了您输入到HTML表单的值。然后,在第50行单击Step-into(皤)按钮。这将把您带到AdderViewbean的代码中。一旦您处在了AdderView源代码中,您将意识到我们正在调用错误的方法。我们本应该调用AdderView.strCat()方法,而不是AdderView.badStrCat()。所以,现在您将需要回到您的JSP文件,编辑第50行并将它修改为:Stringmethod0=AdderBean.StrCat(st1,st2);保存JSP。切勿除去断点(我们将需要它来演示客户机调试和EJB)。重新装入您的输入表单。在两个域中输入两个不同的值。例如:Hello”和Wor
24、ld”,单击submit。14.现在,您将注意到null已经消失,但我们将得到第一个字符串与它自身连接在一起形成的字符串。要修正这一错误,我们将需要再次调试对EJB的JSP调用。EJB的调试我们使用EJB访问bean来访问负责完成字符串连接的会话bean。试图单步跳入(stepinto)对EJB的调用将使我们陷入一片混乱的存根和服务器所生成的代码。在象这样的情况下,在可能发生问题的调用中的EJB上设置断点是常见的做法。在我们的例子中是AdderSessionBean.StrCat()。在Java或J2EE透视图中,从AdderEJB工程打开poc.debug.ejbs.AdderSession
25、Bean.java。在StrCat方法的第一个执行行添加一个断点。重新装入您的输入表单。在两个域中输入两个不同的值(即Hello”和“World”)并单击Submit。您将首先命中JSP中的断点。单步跳过前两行,然后单步跳入行号50。在AdderView.StrCat方法中,单步跳过这个样子的行:ret=bean.StrCat(str1,str2);请注意,在这个案例中,在应用程序服务器(AppServer)空间中运行的Adderviewbean实际就是我们的EJB的客户机,不过,在这个特定的案例中,它们共享同一个JVM。所以,如果您在Process视图查看执行堆栈内部,您将注意到它们是在同一
26、个进程上运行。另一个客户机(在EJBclient.zip中)可以用作独立Java应用程序,用来测试您的EJB。当您把这个客户机添加到任何Java工程中时,请确保您把下列内容添加到了工程的构建路径。6.oj2ee.jar*oijvejb35.jar*oAdderEJB工程(*)这些文件可在pluginscom.ibm.etools.websphere.runtimelib目录找到。当您调试这个应用程序时,您将注意到两个重要事实:存在两个独立的进程。一个用于应用程序,一个用于EJB服务器。在您的代码的执行过程中,WebSphereStudioApplicationDeveloper调试器有从一个J
27、VM到另一个JVM来回切换的强大能力。7.单击Step-over(:)按钮,您会注意到调试器将在EJBstrCat方法内的断点处停止。单步遍历执行EJB,您将认识到错误。我们只是把strl连接了两次,根本没使用str2。修正这个问题并保存代码。您将需要重新启动服务器以刷新EJB代码。别忘了要在调试模式中启动它。与Servlet和JSP的情况不同,当您修改了您的EJB中的代码时,WebSphere4.0将要求重新装入服务器。重新装入您的输入表单,输入数据,跟踪您的代码到EJB语句。验证sf变量是否确实带有正确的值。请注意,如果您从EJB单击Return(證按钮,则您将运行回到服务器生成的EJB类
28、。为了避免发生这样的事情,在堆栈中选择JSP调用就行了,如下面的图7所示。然后,您可以使用Step-over(园)按钮并继续执行JSP文件。13.图7.选择了JSP的Debug进程视图14.验证返回字符串是否带有正确的值(您输入的字符串的连接)。现在,您成功地完成了存在问题的Servlet、JSP和EJB代码的调试。结束语到目前为止,我们在这篇实际操作的文章中所做的是,向您展示在不同的情形下如何使用WebSphereStudioApplicationDeveloper开发环境调试Java应用程序、Servlet、JSP和EJB。在下一篇文章中,我们将向您展示如何使用WebSphereStudi
29、oApplicationDeveloper调试器调试在WebSphereAE的远程实例中运行的应用程序。在本系列的第1部分中,我们介绍了新的WebSphereTstudioApplicationDeveloper调试器以及如何在不同的测试情形下使用它。在本文中,我们将向您展示如何配置WebSphereStudioApplicationDeveloper来调试已经部署到主机的WebSphereApplicationServer,高级版(AE)上的应用程序。在对部署进行测试时,这一点很有用,并展示了WebSphereStudioApplicationDeveloper的调试器作为远程调试器的新功能
30、。您可以采用JoeWinChester所写的文章调试在WebSphereApplicationServer内运行的Java代码描述的类似步骤,使用独立的IBM远程调试器(IBMRemoteDebugger)在WebSphereApplicationServer,高级单服务器版(AdvaneedSingleServerEdition(AEs)上调试应用程序。我们决定在本文中不做那些工作,因为WebSphereStudioApplicationDeveloper支持将AEs用作测试服务器,而且也提供动态发布。我们假设您已经知道如何运行ApplicationServer并且了解Application
31、Server管理的基础知识。如果您以前使用IBM远程调试器调试过WebSphereApplicationServerAE,则您可以跳过本文的第一部分,因为它是以前的文章,WebSphere开发者园地上JoeWinchester所写的调试在WebSphereApplicationServer内运行的Java代码的重复。配置ApplicationServer以在调试模式中运行在WebSphereApplicationServerAE上进行的调试是以每个应用程序服务器为基础的。这允许您把一个特定的应用程序服务器设置成远程调试,而其它应用程序服务器可以有不同设置。从WebSphere管理控制台单击您想
32、远程调个试的应用程序服务器(applicationserver)。这样做之后,该应用程序服务器的设置将立刻出现在窗口的右边较下部分,如下面的图1所示。选择JVMsettings窗格。3.图1.Applicationserver属性4.从JVMsettings窗格单击AdvancedJVMSettings.。要实际看到这个按钮,您得向下滚屏。5.在如下所示的新打开的对话框中,确保您选择了以下设置:a.EnableDebugMode被选中。b.EnableIBMDistributedDebugger未被选中。c.DisableJIT被选中。最新的WebSphereApplicationServer
33、会自动禁用JIT。使用JIT将启用代码优化,按照定义,代码优化将改变行号并导致所有调试器失效。d.在测试域DebugString输入以下字符串。请注意,“nnnn是您所选择的端口号。您可以查看调试字符串意义说明部分获得关于端口号的更多信息。-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=nnnne.f.单击OK。图2.AdvancedJVMsettings调试字符串意义说明-Xrunjdwp:transport=dtsocket这个字符串告诉调试器使用套接字作为它的传输机制。调试器将能够使用开放套接字来侦听客户机。另一个可能的值
34、是dt_shmem,如果调试器和Applicationserver在同一台机器上运行,它就用共享内存代替套接字传输。server=yJVM作为可调试的服务器运行,并且调试客户机可以连接到JVM。suspend=n当您开始运行时,服务器不应暂挂。重要信息:如果您使用suspend=y,则applicationserver将在执行开始时暂挂并等待,直到调试器连到该应用程序服务器上,接着您才可以从调试器恢复applicationserver的运行。如果Servlet或EJBs?被配置成在服务器启动的时候装入,并且您想调试这些代码,这就会变得很方便。通过将suspend设置为y,您就为自己留下了在恢复
35、服务器启动前进行连接调试器和设置断点等操作的时间。address=nnnn请勿输入nnnn,而要输入您选择的一个号码。这个号码将是一个端口号,调试器引擎将侦听这个端口号,等待调试器接口钩(hook)上来。一个常见的错误是使用8080或9080端口,这两个端口总是处于忙状态。在NT机器上,您可以发出命令netstat-ausedports.txt,然后搜索usedports.txt文件找出哪些端口正在使用中并避开它们。您可以在您正在使用的任何平台上使用类似的命令。在这个样本中,我使用了0371,这个端口在我的机器上一直是闲着的。在SunJavaWeb站点上可找到更多信息。查找JavaPlatfo
36、rmDebuggerArchitecture(JPDA)文档,您将在ConnectionandInvocationDetails部分找到这些参数的详细信息。确保单击了Apply,以使对应用程序的更改生效。您的管理屏幕应向您显示您所选择的设置,如下面的图3所示。现在,您应以调试模式启动您的应用程序。图3.完成后的JVM设置将调试器连到ApplicationServerAE上5.要使用WebSphereStudioApplicationDeveloper来调试应用程序,您必须在您的一个工作区工程中调试应用程序代码,并采取这些简单步骤。.确保您正尝试调试的应用程序的EAR被装入到了您的
37、工作区。按我的经验,即使源文件中包含有一些由于没找到所引用的库而产生的错误,仍然可以调试它们。请记住,这个应用程序实际运行在远程服务器上。在应用程序中您想调试的地方插入断点。您可以象本系列的第一篇文章所描述的那样,将断点插入到EJB代码或Servlet中。注:您目前不能调试JSPs?,因为本质上它们是在编译时生成的,而且我们正在使用标准Java调试API的JSP。单击紧靠DebugMenu(选择菜单项Debug=RemoteJavaApplication,如下面的图4所示。图4.调试远程应用程序菜单ProjectDebugWindowHelpApplicationClientLauncherRun-timeWorkben匚hRun-timeWorkbenchWithTracing5eryerLauncherJavaApplication黴RemoteJavaApplication產丁|卷亲J爵瞬砂砾聲|曹|该所示。Port号是您在前面的调在对话框指定您的主机名和端口号,如下面的图5试字符串中所指定的那个nnnn号。图5.调试服务器对话框6.单击Finish,您将注意到,在Debug透视图中显示一个“classidM正在运行。请参看下面的图6。这是您的WebSphereApplic
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年商场周边治安联防与信息互通
- 2026年南开大学计算机组成原理实验
- 2026年矫形器生产设备与刀具磨料等耗材供应
- 2026年心血管康复专科护士培训计划与运动处方
- 2026年金融科技企业软件专利布局培训
- 2026年数字孪生驱动的慢性病风险评估模型构建
- 2026年超声医学正高答辩常见问题
- 2025年乡村小学英语课堂的新伙伴
- 2026年建筑工程分包单位消防安全培训
- 2026年凝血功能异常出血风险评估与处理
- 2025年广西初中学业水平考试中考(会考)地理试卷(真题+答案)
- 形势与政策智慧树知到答案2024年西北师范大学
- 《电站锅炉渣井》
- 化学在医疗中的应用
- 版有色金属工业矿山井巷工程预算定额说明完整版
- 扣件式钢管脚手架安全管理培训
- ICU护士与家属及患者沟通技巧
- KTV消防安全管理制度
- 大国三农-辉煌成就版智慧树知到课后章节答案2023年下中国农业大学
- 2022勘察设计服务成本核算指南
- 光伏工程 危害辨识风险评价表(光伏)
评论
0/150
提交评论