第1页 使用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 程序可被调试的编译,过程如下。
输入 CL 命令 ' MD DIR (java) '
创建 IFS 下的 /java 目录,目的是把 IBM i 上要调试的 Java 源程序都放在 IFS 下的
/java 目录下,进行之后的编译。
输入 CL 命令 ' qsh '
进入 Qshell,如图 1 所示,java 即为 a) 创建的 java 目录,在此目录下存放将要进行编译的 Java 源程序。
图 1. 进入 QSH Command Entry
图 1. 进入 QSH Command Entry
输入 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 目录下的文件
Press F3 (Exit) 退出 Qshell,输入 CL 命令 ' wrklnk java ' 确认查看 sleep.class 是否成功产生。
IBM i 上两种 Java 程序的调试方法
方法一,在 IBM i 绿屏上使用 CL 命令调试 Java 程序
输入 CL 命令 ' addenvvar envvar('CLASSPATH') VALUE('/java') '
设置环境变量 CLASSPATH 为 /java,即 Java 的 .class 文件存放在此目录下。
输入 CL 命令 'JAVA CLASS(sleep) OPTION(*DEBUG)'
使用 CL 命令 JAVA,CLASS(sleep) 中的 sleep 为要调试的 Java 程序的名字。其中设定
参数 OPTION(*DEBUG) 来启动系统调试器执行 Java 程序。这里特别注意,只能调试一个 .class 文件,如果有一个 JAR 文件的文件名做为参数 CLASS 的关键字去调试,OPTION(*DEBUG) 参数是不被支持的。
图 3. 进入调试模式并显示被调试的 Java 程序的源代码
图 3. 进入调试模式并显示被调试的 Java 程序的源代码
利用 IBM i System Debugger 提供的相关调试操作,如 Press F6 设置或清除断点、F10 单步执行程序、F11 操作变量、跟踪查看、F12(Resume) 继续执行等等。调试过程与在 IBM i 上调试其他程序一样,部分相关的调试操作介绍如下。
设置断点
可以把光标移至要设定断点的指令行处,Press F6 设置断点或者直接输入调试指令
'Break + 行号' 在调试指令行上(参考图 4)。
图 4. 设置断点 Debug . . . Break 13
图 4. 设置断点 Debug . . . Break 13
单步调试
Java 程序在调试过程中可以在程序运行停止的开始位置或者程序运行停止的断点位置
使用 step(F10) 单步执行程序,包括对程序调用的任何 function 的 step over 和 step
Into (F22) 的执行。如果继续执行程序,Press F12(Resume)(参考图 5)。
图 5. 从指令 13 行断点处 F10 Step 执行到 14 行。
图 5. 从指令 13 行断点处 F10 Step 执行到 14 行。
变量求值
在程序调试运行过程中有两种方式可以查看变量的值:
在调试命令行上 Enter 'EVAL + 变量名';
把光标移至代码显示的变量名位置出,Press F11(Display variable);
另外也可以通过 EVAL 命令改变变量的内容,在这里不做介绍。
图 6. 查看变量值 Debug . . . eval mSecs
图 6. 查看变量值 Debug . . . eval mSecs
图 7. 范例程序 sleep.java 调试后的运行输出结果,即在屏幕上打印“Sleep now for 1 Minute...”。
图 7. 范例程序 sleep.java 调试后的运行输出结果,即在屏幕上打印“Sleep now for 1 Minute...”。
|
|