调试操作
在运行程序之前,可以使用服务器的交互式显示来使用 *DEBUG 选项来查看源代码。 然后,可以设置断点,或者单步执行或进入程序以在程序运行时分析错误。
使用 *DEBUG 选项调试 Java 程序
要使用 *DEBUG 选项调试 Java™ 程序,请执行以下步骤:
- 使用 DEBUG 选项(即
javac工具上的 -g 选项)编译 Java 程序。 - 将类文件 (.class) 和源文件 (.java) 插入到服务器上的同一目录中。
- 使用 IBM i 命令行中的运行 Java (RUNJVA) 命令运行 Java 程序。 在 "运行 Java" (RUNJVA) 命令上指定 OPTION (*DEBUG)。 例如:
RUNJVA CLASS(classname) OPTION(*DEBUG)只能调试类。 如果为 CLASS 关键字输入了 JAR 文件名,那么不支持 OPTION (*DEBUG)。
- 将显示 Java 程序源。
- 按 F6 (添加/清除断点) 以设置断点,或按 F10 (步骤) 以单步执行程序。
注:
- 使用断点和步骤时,请检查 Java 程序的逻辑流,然后根据需要查看和更改变量。
- 在 RUNJVA 命令上使用 OPTION (*DEBUG) 将禁用 Just-In-Time (JIT) 编译器。
- 如果您无权使用 "启动服务作业" (STRSRVJOB) 命令,那么将忽略 OPTION (*DEBUG)。
从另一个屏幕调试 Java 程序
使用服务器的交互式显示来调试 Java 程序时,只要程序源迂到断点,就会显示该程序源。 这可能会干扰 Java 程序的显示输出。 要避免此情况,请从另一个屏幕调试 Java 程序。 Java 程序的输出显示在运行 Java 命令的位置,而程序源显示在另一个屏幕上。
也可以采用这种方式来调试已在运行的 Java 程序,只要它已在启用调试的情况下启动即可。
注: 您可以通过将 AGTPGM (D9TI) 选项添加到 JAVA/RUNJVA 命令来启用 Java 调试,以便将 IBM i 调试器与 JVM 配合使用。 使用 OPTION (*DEBUG) 时,不需要 AGTPGM (D9TI)。
要从另一个屏幕调试 Java ,请执行以下操作:
- 在开始设置以进行调试时,必须挂起 Java 程序。您可以通过制作以下程序来保存 Java 程序:
- 等待来自键盘的输入。
- 等待一个时间间隔。
- 用于测试变量的循环,这要求您设置一个值以最终使 Java 程序脱离循环。
- 保存 Java 程序后,转至另一个屏幕以执行以下步骤:
- 在命令行上输入 "使用活动作业" (WRKACTJOB) 命令。
- 查找运行 Java 程序的批处理立即 (BCI) 作业。 查看 QJVACMDSRV 的子系统/作业列表。 在 "当前用户" 列表下查找您的用户标识。 在 "类型" 下查找 BCI。
- 输入选项 5 以使用该作业。
- 在 "使用作业" 屏幕的顶部,将显示 "编号" , "用户" 和 "作业"。 Enter 键
STRSRVJOB Number/User/Job - 输入
STRDBG CLASS(classname)。 Classname 是要调试的 Java 类的名称。 它可以是您在 Java 命令上指定的类名,也可以是另一个类。 - 该类的源出现在 "显示模块源" 屏幕中。
- 只要您希望在该 Java 类中停止,就通过按 F6 (添加/清除断点) 来设置断点。 按 F14 以添加要调试的其他类,程序或服务程序。
- 按 F12 (恢复) 以继续运行程序。
- 停止保留原始 Java 程序。 当命中断点时, "显示模块源" 屏幕出现在输入了 "启动服务作业" (STRSRVJOB) 命令和 "启动调试" (STRDBG) 命令的屏幕上。 Java 程序结束时,将显示
Job being serviced ended消息。 - 输入 "结束调试" (ENDDBG) 命令。
- 输入 "结束服务作业" (ENDSRVJOB) 命令。
调试 Java 程序时, Java 程序实际上正在批处理立即 (BCI) 作业中的 Java 虚拟机中运行。 您的源代码显示在交互式屏幕中,但 Java 程序未在其中运行。 它正在另一个作业 (服务作业) 中运行。 请参阅 QIBM_CHILD_JOB_SNDINQMSG 环境变量主题,以获取有关此变量的更多信息,该变量控制 BCI 作业在调用 Java 虚拟机之前是否等待。