服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

用weblogic workshop调试应用程序

    在创建java应用程序时,发现和修正bug通常比最初编写源代码所花费的时间还要多。所以很显然,当创建j2ee快速开发环境时, weblogic workshop开发团队需要建立一个新的环境,这个环境应该使得调试比以前更快、更容易。

    为了做到这一点,我们支持两种不同的调试模式,以及使调试更快、更容易的一些新设置:
    1. java调试模式(java debugging mode)--这种模式可使java应用程序的调试与任何其他java 调试器相同。
    2. workshop 调试模式(workshop debugging mode)--这种调试模式是特别针对workshop应用程序的,而且我们加倍付出了努力使得连接和调试这些应用程序更加容易。这使得在weblogic workshop上的应用程序级别的调试更加容易。
    3. 智能调试(smart debugging)--这是一个设置,可以通过打开这个设置从调用栈和线程窗口中筛选出一些常见的weblogic类和线程,并在单步调试时绕过这些类。
    4. 不同线程挂起策略(different thread suspension strategies)--为了改善单步调试的性能,在调试时weblogic workshop支持不同的线程挂起策略。
    调试模式是由当前项目的内容所决定的。如果你的一个workshop应用需要服务器的支持,比如一个web应用,你需要设置的调试模式为workshop调试模式,否则,建议设置调试模式为java调试模式。

    通过项目属性可以设置或取消新的调试设置,可以通过"tools -> project properties"菜单项找到项目属性。

    有很多与调试相关的配置。这部分将讲述以下项目的调试:

    web应用
    java 应用程序
    连接到一个正在运行的java应用程序
    远程 web应用
    处于production mode环境下的域
    非workshop应用 

    调试 web应用

    在开始之前,让我们首先看一个示例应用程序。我们从samplesapp开始,因为它已经有了一个配置好的域以及一些示例文件,可以用于运行和调试。

    首先,打开应用程序samplesapp。打开文件helloworld.jws,然后按下ide工具栏上的开始按钮。如果提示你启动服务器,那么现在就启动它。
    如果服务器运行在开发模式中,你将注意到有3个命令shell被创建,如果操作系统是windows的话。(在 linux上创建的是3个java进程,但是没有可视窗口)。这些进程包括:
    1) 正在运行应用程序的 weblogic服务器。
    2)一个调试代理服务器,它方便调试并允许更快的远程调试。
    3) pointbase数据库控制台,因为它是针对示例workshop域的缺省数据库。

    当该服务器作好被调试的准备时,运行你的应用程序的页面的浏览器便会出现。这时,调试被激活。调试代理已经连接到weblogic服务器进程,并且ide已经建立了与调试代理之间的通信。

用weblogic workshop调试应用程序(图一)
图1: weblogic workshop ide以及测试浏览器



    可以通过在文件helloworld.jws中的第30行设置断点来进行演示。接着,如果你在浏览器中单击"hello"按钮,你就可以找到ide中的断点。

    调试标准的java 应用程序

    除了调试web应用外,workshop还允许你调试标准的java应用程序。我们继续用samplesapp进行试验。

    1. 按下ide工具栏中的stop 按钮(如果你仍然在运行helloworld.jws的话)。
    2. 打开proxyclient项目中的文件mazeclient.java。
    3. 在main方法中设置一个断点。
    4. 按下ide工具栏中的开始按钮。你将找到断点。
    5. 按下ide工具栏中的继续按钮。
    6. 等到"enter rows"出现在output窗口中。
    7. 按下ide工具栏中的pause按钮。
    现在你可以查看call stack框或者threads框,看看进程在做什么。通过这样做,你可能会注意到一个问题:该进程正在等候来自于控制台的输入,而ide没有任何用于输入的控制台。要正确调试该应用程序,我们需要从命令行运行这个程序并连接它。

    连接正在运行的进程

    在进一步讲解之前,你应该阅读 proxyclient项目中的readme.html。确保你能够从命令行运行该项目。
    1. 打开build.xml,然后向javac ant任务中添加debug="true"
    2. 在命令行中输入"ant compile"。
    3. 打开run.bat。(或者如果你运行的是linux,就打开run.sh)
    4. 插入参数"-xdebug -xrunjdwp:transport=dt_socket,address=2235,suspend=n,server=y"。
    5. 输入"run",从命令行运行mazegen。 

    现在你需要设置调试器选项来连接到那个进程。

    1. 在ide中右键单击proxyclient项目,然后选择properties选项。
    2. 进入调试器面板。
    3. 在debugging options下,单击"attach to process"单选按钮。
    4. 现在,在"attach to process settings"下将端口设置为2235。
    5. 单击ok。
    现在当你打开文件mazeclient.java并按下开始按钮时,ide将停止在你设置的断点处。使用同样的技术将调试器连接到任意正在运行的java进程。

    远程调试web应用

    远程调试web应用简单而快速。当你启动服务器时创建的调试代理更会加快这一场景的进度。我们已经创建了一个代理,这个代理与ide之间采用一中很笼统的协议。然后代理将这个协议翻译为更细粒度、但是更详细的jvm 可以理解的jdi(java调试接口)协议。这就使得通过网络的调试信息数量大大减少。为了演示这一点,需要另一台安装了workshop的机器:
    1. 进入另一台安装了workshop的机器,并启动workshop。
    2. 打开samplesapp。
    3. 在tools菜单下打开application特性,并把hostname设置为第一台机器的名称。
    4. 进入文件 helloworld.jws,并在hello()中设置一个断点,位置是该函数的返回行。
    5. 按下start按钮。你现在应该可以正常调试了。
    警告:当按照这种方法进行调试时,你将不能把改动部署到服务器上。你对源代码所做的任何改动都需要通过weblogic 控制台重新建立和重新部署。

     调试production模式的服务器

    有时问题可能暴露在测试机器、两阶段调试(staging)机器或者运行在一个生产域(production domain)上的其他机器上。你可能希望能够在这样的环境中连接和调试应用程序。但是,当一个域处于生产模式的时候,它不会使用可以使调试更简单的大部分我们喜欢的东西。这意味着要调试生产域,将需要做更多的工作 。你将需要:
    1. 修改文件startweblogic.cmd(如果你的系统为linux,则修改startweblogic.sh),加入调试参数(参见上面的"连接正在运行的进程"一节)。
    2. 在ide中,需要假定你正在调试一个java应用程序。这意味着你将需要创建一个java应用程序并在其中添加一个文件。该文件只是一个占位程序,所以你可以启动该项目。
    正确完成这些步骤后,启动你的production服务器。然后进入ide,打开占位程序文件,然后按下 start按钮,ide 现在应该连接上了,那么就可以调试该服务器了。你仍然可以打开smartdebugging ,这样你就可以绕过不感兴趣的weblogic线程和类。不幸的是,在生产模式中,不能调试xscript文件。

    非workshop应用

    如果你试图在不支持workshop的weblogic server 域上调试应用程序。那么有两种选择:

    1. 可以按照上面的"调试production服务器"一节中的指示,或者
    2. 可以按照 workshop帮助中的"how do i: weblogic workshop-enable an existing weblogic server domain?"主题中的说明,来启用weblogic server域的workshop支持。

    高级 workshop调试主题

    当创建workshop时,我们添加了大量的特性,以便用户能更好地浓缩他们所调试的应用程序上。这些特性或者使调试速度加快,或者尽可能地筛选出不重要的信息。

    web应用中的线程

    当运行一个web应用,单击断点或者单击暂停时,我们并没有暂停vm中所有的线程。我们只暂停了weblogic server的用户线程。这主要是考虑到性能的问题。事实证明,停止和启动vm中的所有线程需要花费很多时间,而且,从web应用的角度来看,这些线程是没有意义的。

用weblogic workshop调试应用程序(图二)


图2:打开和关闭"smart debugging"时的调用栈。



    调试搜索路径

    通常,在进行单步调试时,有些你想让ide搜索的路径或者zip文件不在项目中。这时,你可以将这些文件添加到application属性下的debug search path中。在这个列表中,顺序是很重要的。当ide试图找到代表某个类的一个文件时,ide将从顶部开始。你将注意到缺省情况下ide首先查找当前项目。

扫描关注微信公众号