跳转到主要内容

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

所有提交的信息确保安全。

  • 关闭 [x]

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

所有提交的信息确保安全。

  • 关闭 [x]

如何使用 IBM i System Debugger 调试 Java 程序

李 琰, 软件工程师, IBM
李琰,来自 IBM 中国系统与科技研发中心 IBM i System Debugger 团队,目前主要负责 IBM i 上 Debugger 的开发与测试工作 o

简介: 调试在 IBM i 上运行的 Java 程序有很多种选择,其中最为方便有效的是使用 IBM i 提供的 IBM i System Debugger。本文主要站在使用者的角度介绍如何在 IBM i 上使用 IBM i System Debugger 调试 Java 程序,为在 IBM i 上开发及调试 Java 程序的用户提供了较为详细的使用指南。保证了用户在 IBM i 上可以开发出更优质高效的 Java 程序。

发布日期: 2011 年 11 月 17 日
级别: 中级
访问情况 : 5204 次浏览
评论: 


如何使用 IBM i System Debugger 调试 Java 程序

当在 IBM i 上使用 Java 时,您可以使用 Qshell Interpreter 或者 CL 命令提供的 Java tools,在 Qshell 环境和 IBM i 环境上进行与 Java 开发有关的操作。本文主要介绍如何在 IBM i 上调试 Java 程序,对于在 IBM i 开发 Java 程序的其他环节不在此介绍。

调试在 IBM i 上运行的 Java 程序有很多种选择,其中最为方便有效的是使用 IBM i 提供的 IBM i System Debugger。IBM i System Debugger 提供了两种调试方式,在绿屏上直接使用 CL 命令行调试和使用图形化交互式人机界面调试(以下简称,IBM i System Debugger GUI)。本文主要站在使用者的角度介绍这两种调试方法。

调试前的准备工作

首先为了能够调试 IBM i 的 Java Job ,JVM 必须被启动。它是是伴随调试功能的启动而启动的,调试引擎则负责 Java 程序的调试管理。当 JVM 启动时调试引擎运行,这是成功调试 Java 代码的关键所在。一旦 JVM 成功启动了调试引擎,Java Job 就可使用绿屏上的 CL 命令去调试,或者使用 IBM i System Debugger GUI 调试。在 IBM i 上使用调试命令时,只要我们设定了和调试有关的参数即可自动启动调试引擎,例如 OPTION(*DEBUG)、-g,不用特别设定和启动调试引擎有关的参数。

其次在调试 Java 程序之前要对 Java 源程序进行编译,这是任何程序被 CPU 执行前必须做的动作,目的是将源代码编译成机器可以识别的机器码。编译可调式的 Java 程序时,编译命令中一定要设定 Debug View 参数,这样 debugger 运行可执行程序时就会显示出当前执行指令对应的源代码,可以查看程序中定义的变量所对应的存储空间等。针对 Java 程序可被调试的编译,过程如下。

  1. 输入 CL 命令 ' MD DIR (java) '

    创建 IFS 下的 /java 目录,目的是把 IBM i 上要调试的 Java 源程序都放在 IFS 下的

    /java 目录下,进行之后的编译。

  2. 输入 CL 命令 ' qsh '

    进入 Qshell,如图 1 所示,java 即为 a) 创建的 java 目录,在此目录下存放将要进行编译的 Java 源程序。



    图 1. 进入 QSH Command Entry
    图 1. 进入 QSH Command Entry

  3. 输入 QSH 命令 ' cd /java ',输入 QSH 命令 ' javac -g sleep.java '

    进入 java 目录下使用 javac 编译产生出可调试的 sleep.class ,其中参数 -g 不可或缺,就是之前提到的产生 Debug View 参数的 DEBUG option。在此建议把源代码文件 .java 文件和编译产生的 .class 文件放在 IBM i 同一个目录下,这样便于 debugger 查找文件,如图 2 所示。



    图 2. java 目录下的文件
    图 2. java 目录下的文件

  4. Press F3 (Exit) 退出 Qshell,输入 CL 命令 ' wrklnk java ' 确认查看 sleep.class 是否成功产生。

IBM i 上两种 Java 程序的调试方法

方法一,在 IBM i 绿屏上使用 CL 命令调试 Java 程序

  1. 输入 CL 命令 ' addenvvar envvar('CLASSPATH') VALUE('/java') '

    设置环境变量 CLASSPATH 为 /java,即 Java 的 .class 文件存放在此目录下。

  2. 输入 CL 命令 'JAVA CLASS(sleep) OPTION(*DEBUG)'

    使用 CL 命令 JAVA,CLASS(sleep) 中的 sleep 为要调试的 Java 程序的名字。其中设定

    参数 OPTION(*DEBUG) 来启动系统调试器执行 Java 程序。这里特别注意,只能调试一个 .class 文件,如果有一个 JAR 文件的文件名做为参数 CLASS 的关键字去调试,OPTION(*DEBUG) 参数是不被支持的。



    图 3. 进入调试模式并显示被调试的 Java 程序的源代码
    图 3. 进入调试模式并显示被调试的 Java 程序的源代码

  3. 利用 IBM i System Debugger 提供的相关调试操作,如 Press F6 设置或清除断点、F10 单步执行程序、F11 操作变量、跟踪查看、F12(Resume) 继续执行等等。调试过程与在 IBM i 上调试其他程序一样,部分相关的调试操作介绍如下。
  4. Press F14 (Work with Module List).

    您可以在此调试一个 Java 程序同时增加调试其他程序,提供了在 IBM i 上同时调试多个程序的方式(参考图 8)。



    图 8. Work with Module List
    图 8. Work with Module List

调试步骤如下:

  1. 当调试 Java 程序时,进入了调试模式显示调试程序的代码,此时 Press F14 (Work with Module List);
  2. 选择 Opt 1(Add program) 增加要调试的 SRVPGM、PGM 或 CLASS;
  3. 选择 Opt 5(Display module source) 显示要调试的 *MODULE 的代码;
  4. 按照正常调试程序的方法调试新增显示的 *MODULE 代码;
  5. 调试运行结束 Press F3 返回 Command Line。

方法二,使用 IBM i System Debugger GUI 去调试 IBM i 上的 Java 程序

IBM i System Debugger GUI 为用户提供一个更为简单、直观的交互式图形界面的调试方式,方便 IBM i 用户的使用。对于 IBM i System Debugger GUI 安装,需要到 IBM i 下的 IFS 里下载相应的 JAR 文件,具体步骤如下:

  1. 在本地 PC 上建立新的文件夹 E:\DebuggerGUI;
  2. 在 IFS 里进到 /QIBM/ProdData/HTTP/Public/JT400/Lib,下载 jt400.jar 和 tes.jar 文件到本地 PC 新建的文件夹目录下 E:\DebuggerGUI;
  3. 进入 http://javahelp.java.net/,下载 javahelp2_0_05.zip 文件;
  4. 在下载的 .zip 文件里,我们可以找到一个 jh2.0/javahelp/lib 的目录。复制这个目录下的 jhall.jar 文件到本地目录 E:\DebuggerGUI 文件夹下;
  5. 在桌面上点右键选择 New|Shortcut,建立 IBM i System Debugger GUI 的快捷方式显示(参见图 9);

    图 9. 建立桌面快捷方式
    图 9. 建立桌面快捷方式

  6. 输入以下项目内容,javaw -cp jhall.jar;jt400.jar;tes.jar utilities.DebugMgr 在空白处,Press Next;
  7. 输入新建的快捷方式名字,如 iDebugger,Press OK,在桌面上产生一个新的 icon。
  8. 在产生的新的 icon 上,点右键选择 Properties,在 shortcut tab 下的' Start in:'内填入文件夹目录,Press “OK”按键(参考图 10)。

    图 10. 快捷方式属性设置
    图 10. 快捷方式属性设置

至此,IBM i System Debugger GUI 安装完成,只要双击桌面上的 iDebugger 图标,即可使用 IBM i System Debugger GUI 调试 Java 程序。具体调试步骤如下:

  1. 双击桌面上的 iDebugger 图标,首先开启的是 Debug Manager。Debug Manager 是 IBM i System Debugger GUI 连接到需要调试 java 程序的 IBM i 机器的一个管理工具,如图 11 所示。

    图 11. Debug Manager Window
    图 11. Debug Manager Window

    如图 11 所示我们可以单击 Add System 按键来增加希望连接到的任意 IBM i 系统,只要在建立新系统时,输入您在该系统上所拥有的 User ID 和 password。我们通过 Debug Manager 移除系统、新增或移除使用者等在这里不做过多介绍。Debug Manager 有提供两个主要基本功能:

    1. 可以方便的开启含有被调试程序的 IBM i 机器,通过包含所有产生调试功能的机器列表前的' Debug '选项。
    2. 可以通过使用绿屏上的 CL 命令' STRDBG ',在 IBM i System Debugger GUI 上注册要调试的程序。也就是说,只要 Debug Manager 与含有被调试程序的机器建立了连接,即 Status 为 Ready,在绿屏上输入 CL 命令' STRDBG '后会产生 IBM i System Debugger GUI 方式从而替代了传统的绿屏调试方式。
  2. 启动 Start Debug, 通过 System Debug Manager 提供的 Start Debug ... 注册要调试的 Java 程序并启动。进入 System Debug 界面,用户可以为所调试的程序选择调试方法、输入特殊的调试参数。Star Debug 注册界面设置如图 12 所示。

    图 12. Star Debug 注册界面
    图 12. Star Debug 注册界面

    因为本次调试过程是用户主导控制用户程序的调试开启,所以在选择调试方法时选择 Submit and debug program in batch job。另外被调试 Java 程序相关参数如 Type、Class name、Classpath 设定如图所示,和在 IBM i 上的 Java 程序编译生成的 .class 文件的相关参数是对应的。

  3. Press “OK” 按键,立即启动系统调试窗口。如图 13 所示,调试窗口会显示出被调试程序的源代码,被调试程序的相关注册信息如 Program、Job、System、User 等。

    图 13. 系统调试窗口
    图 13. 系统调试窗口

  4. 在 IBM i System Debugger GUI 的系统调试窗口可以像在绿屏下一样的执行各种调试操作,而且更加的简单直观。IBM i 的 IBM i System Debugger GUI 和大部分 Debugger 功能基本相近,并且操作简单。如设置断点、单步运行、操作变量值、跟踪查看栈调用和进程等等。图 14 为正在调试的 Java 程序,红色箭头标示出断点位置,黄色标示出的指令为当前执行指令,同时调试界面还提供了变量和指针地址的显示,Call Stack 的信息、Threads 信息等。

    图 14. IBM i System Debugger GUI 调试的 Java 程序
    图 14. IBM i System Debugger GUI 调试的 Java 程序



    图 15. Press Resume 后,Sleep 执行到断点所指的指令行 (Line No. 13),停止运行。
    图 15. Press Resume 后,Sleep 执行到断点所指的指令行 (Line No. 13),停止运行。



    图 16. sleep 执行到断点处的 Call Stack 信息、Threads 信息
    图 16. sleep 执行到断点处的 Call Stack 信息、Threads 信息-1



    图 16. sleep 执行到断点处的 Call Stack 信息、Threads 信息-2



    图 17. Step into 执行到光标所指的指令处 (Line No. 7)
    图 17. Step into 执行到光标所指的指令处 (Line No. 7)



    图 18. 查看此时变量 mSecs 的值
    图 18. 查看此时变量 mSecs 的值

    从断点位置指令 13,单步调试到指令 7,查看此时变量 mSecs 的值,也可以把光标移到 mSecs 处查看。可以看出此时 mSecs = 600,即 sleep(600) 实参附值给 mSecs。



    图 19. sleep 执行完毕输出的答应结果
    图 19. sleep 执行完毕输出的答应结果

总结

以上对如何使用 IBM i System Debugger 调试 Java 程序给予了详细的介绍,仅供使用者参考。IBM i System Debugger 为在 IBM i 开发 Java 程序的用户提供了很好的调试工具,保证了用户在 IBM i 上可以开发出更优质高效的 JAVA 程序。


参考资料

学习

获得产品和技术

讨论

关于作者

李琰,来自 IBM 中国系统与科技研发中心 IBM i System Debugger 团队,目前主要负责 IBM i 上 Debugger 的开发与测试工作 o

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 使用条款

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

(长度在 3 至 31 个字符之间)


单击提交则表示您同意developerWorks 的条款和条件。 使用条款.

 


为本文评分

评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=IBM i, Java technology
ArticleID=775308
ArticleTitle=如何使用 IBM i System Debugger 调试 Java 程序
publish-date=11172011

标签

Help
使用 搜索 文本框在 My developerWorks 中查找包含该标签的所有内容。

使用 滑动条 调节标签的数量。

热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。

我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。

使用搜索文本框在 My developerWorks 中查找包含该标签的所有内容。热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。