当在 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 源程序。

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

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

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

方法一,在 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) 参数是不被支持的。

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

可以把光标移至要设定断点的指令行处,Press F6 设置断点或者直接输入调试指令

'Break + 行号' 在调试指令行上(参考图 4)。

单步调试

Java 程序在调试过程中可以在程序运行停止的开始位置或者程序运行停止的断点位置

使用 step(F10) 单步执行程序,包括对程序调用的任何 function 的 step over 和 step

Into (F22) 的执行。如果继续执行程序,Press F12(Resume)(参考图 5)。

变量求值

在程序调试运行过程中有两种方式可以查看变量的值:在调试命令行上 Enter 'EVAL + 变量名';

把光标移至代码显示的变量名位置出,Press F11(Display variable);

另外也可以通过 EVAL 命令改变变量的内容,在这里不做介绍。

Press F14 (Work with Module List).

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

调试步骤如下:当调试 Java 程序时,进入了调试模式显示调试程序的代码,此时 Press F14 (Work with Module List);

选择 Opt 1(Add program) 增加要调试的 SRVPGM、PGM 或 CLASS;

选择 Opt 5(Display module source) 显示要调试的 *MODULE 的代码;

按照正常调试程序的方法调试新增显示的 *MODULE 代码;

调试运行结束 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 文件,具体步骤如下:在本地 PC 上建立新的文件夹 E:\DebuggerGUI;

在 IFS 里进到 /QIBM/ProdData/HTTP/Public/JT400/Lib,下载 jt400.jar 和 tes.jar 文件到本地 PC 新建的文件夹目录下 E:\DebuggerGUI;

进入 http://javahelp.java.net/,下载 javahelp2_0_05.zip 文件;

在下载的 .zip 文件里,我们可以找到一个 jh2.0/javahelp/lib 的目录。复制这个目录下的 jhall.jar 文件到本地目录 E:\DebuggerGUI 文件夹下;

在桌面上点右键选择 New|Shortcut,建立 IBM i System Debugger GUI 的快捷方式显示(参见图 9);

输入以下项目内容,javaw -cp jhall.jar;jt400.jar;tes.jar utilities.DebugMgr 在空白处,Press Next;

输入新建的快捷方式名字,如 iDebugger,Press OK,在桌面上产生一个新的 icon。

在产生的新的 icon 上,点右键选择 Properties,在 shortcut tab 下的' Start in:'内填入文件夹目录,Press “OK”按键(参考图 10)。

至此,IBM i System Debugger GUI 安装完成,只要双击桌面上的 iDebugger 图标,即可使用 IBM i System Debugger GUI 调试 Java 程序。具体调试步骤如下:双击桌面上的 iDebugger 图标,首先开启的是 Debug Manager。Debug Manager 是 IBM i System Debugger GUI 连接到需要调试 java 程序的 IBM i 机器的一个管理工具,如图 11 所示。

如图 11 所示我们可以单击 Add System 按键来增加希望连接到的任意 IBM i 系统,只要在建立新系统时,输入您在该系统上所拥有的 User ID 和 password。我们通过 Debug Manager 移除系统、新增或移除使用者等在这里不做过多介绍。Debug Manager 有提供两个主要基本功能:可以方便的开启含有被调试程序的 IBM i 机器,通过包含所有产生调试功能的机器列表前的' Debug '选项。

可以通过使用绿屏上的 CL 命令' STRDBG ',在 IBM i System Debugger GUI 上注册要调试的程序。也就是说,只要 Debug Manager 与含有被调试程序的机器建立了连接,即 Status 为 Ready,在绿屏上输入 CL 命令' STRDBG '后会产生 IBM i System Debugger GUI 方式从而替代了传统的绿屏调试方式。

启动 Start Debug, 通过 System Debug Manager 提供的 Start Debug ... 注册要调试的 Java 程序并启动。进入 System Debug 界面,用户可以为所调试的程序选择调试方法、输入特殊的调试参数。Star Debug 注册界面设置如图 12 所示。

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

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

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

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

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

java ui调试_如何使用 IBM i System Debugger 调试 Java 程序相关推荐

  1. java 编写代码_如果您在2016年编写过Java代码-这是您不容错过的趋势

    java 编写代码 2016年最有趣的Java相关主题 关于代码,有很多热门话题,而要跟上所有事情,这是一项全职的工作. 如果您想知道如何从谷壳中分离出小麦,我们已经为您完成了工作. 在下面的文章中, ...

  2. java面试题_阿里大厂流出的数百道 Java 经典面试题

    BAT 常问的 Java基础39道常见面试题 1.八种基本数据类型的大小,以及他们的封装类 2.引用数据类型 3.Switch能否用string做参数 4.equals与==的区别 5.自动装箱,常量 ...

  3. java 堆栈信息_每天学习一个命令:jstack 打印 Java 进程堆栈信息

    Jstack 用于打印出给定的 java 进程 ID 或 core file 或远程调试服务的 Java 堆栈信息. 这里需要注意的是 Java 8 引入了 Java Mission Control, ...

  4. cgdb 调试_在MacOS上使用gdb(cgdb)调试Golang程序

    如果你在MacOS上使用GDB工具载入Golang程序时无法载入,这篇文章可以解决.本文不具体介绍调试的方法,网上的文章太多了就不赘述了. cgdb使用的是gdb的内核,方法和原理试用本文. 问题分析 ...

  5. java循环输入_【图文+视频新手也友好】Java一维数组详细讲解(内含练习题答案+详解彩蛋喔~)...

    [新手友好型视频+图文] 全面讲解Java一维数组(内含带答案和讲解的练习题彩蛋喔) 看完即上手!更有详解版练习题来帮你加深印象~~ 一.视频讲解 一维数组详解https://www.zhihu.co ...

  6. java jni编译_从源码编译Android系统的Java类库和JNI动态库的方法

    利用源码编译Android系统Java类库 1.编写Java项目和Android.mk文件 ├── Android.mk └── src └── com └── lhw └── framework └ ...

  7. JAVA抽象类空指针异常_[ Coding七十二绝技 ] 如何利用Java异常快速分析源码

    前言 异常一个神奇的东西,让广大程序员对它人又爱又恨. 爱它,通过它能快速定位错误,经过层层磨难能学到很多逼坑大法. 恨他,快下班的时刻,周末的早晨,它踏着七彩云毫无征兆的来了. 今天,要聊的是它的一 ...

  8. java idea 模块_使用IntelliJ IDEA搭建多maven模块JAVA项目

    一.新建项目和模块 步骤: 1. 新建一个项目,因为maven管理jar包非常方便,故此处建立一个maven项目:New Project->Maven->(Create from arch ...

  9. java 实现超时_如何实现带有超时的Runnable? - java

    我目前有一个相当简单的SSL服务器/客户端项目,其中涉及标准Java后端和Android前端.与客户端发送数据后,我想尝试从服务器读取响应.但是,我遇到了一个小问题.服务器并不总是响应,因此我不得不以 ...

最新文章

  1. Python库全部整理出来了,非常全面
  2. Struts(七):action配置文件之通配符映射
  3. iPhone7总不在服务区?免费网络电话可解通话烦恼
  4. node-serialport —— Node.js 串口数据读写包
  5. 计算最长的字符串长度
  6. 自定义ik分词加载无效的问题分析
  7. Python——三元表达式
  8. 蓝桥杯 BASIC-11 基础练习 十六进制转十进制
  9. 09面向对象基本概念
  10. 《机器学习实战》代码实现学习一 使用K-近邻算法改进约会网站的配对效果(数据准备)...
  11. javaweb课程设计房屋租赁系统
  12. Python小甲鱼课后习题 乌龟吃小鱼
  13. 计算机主机结构图手画,流程图怎么画简单又漂亮
  14. 最全最新cpu显卡天梯图_2019桌面级显卡排行_2019年2月最新CPU天梯图 桌面级处理器天梯图...
  15. 音视频入门 (iOS上fdk-aac的交叉编译)
  16. 回忆做嵌入式软件的几年
  17. vue 有关于命名大小写的问题
  18. 如何判断光纤收发器是否有问题?
  19. xlsx无法导入MySQL?
  20. python+django大学生专业社团信息管理系统

热门文章

  1. smart pointer in gamedev
  2. 文本比较算法Ⅲ——计算文本的相似度
  3. C#如何获得当前程序所在的目录
  4. CentOS安装网卡设置
  5. IPv6的利与弊—Vecloud微云
  6. UTL_FILE包用法小记
  7. GEO数据下载及处理详细过程
  8. 从FCN到DeepLab
  9. C#-WinForm-无边框窗体的移动和阴影-API
  10. spark streaming 5: InputDStream