调试操作

在运行程序之前,可以使用服务器的交互式显示来使用 *DEBUG 选项来查看源代码。 然后,可以设置断点,或者单步执行或进入程序以在程序运行时分析错误。

使用 *DEBUG 选项调试 Java 程序

要使用 *DEBUG 选项调试 Java™ 程序,请执行以下步骤:
  1. 使用 DEBUG 选项(即 javac 工具上的 -g 选项)编译 Java 程序。
  2. 将类文件 (.class) 和源文件 (.java) 插入到服务器上的同一目录中。
  3. 使用 IBM i 命令行中的运行 Java (RUNJVA) 命令运行 Java 程序。 在 "运行 Java" (RUNJVA) 命令上指定 OPTION (*DEBUG)。 例如: RUNJVA CLASS(classname) OPTION(*DEBUG)

    只能调试类。 如果为 CLASS 关键字输入了 JAR 文件名,那么不支持 OPTION (*DEBUG)。

  4. 将显示 Java 程序源。
  5. 按 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 ,请执行以下操作:
  1. 在开始设置以进行调试时,必须挂起 Java 程序。
    您可以通过制作以下程序来保存 Java 程序:
    • 等待来自键盘的输入。
    • 等待一个时间间隔。
    • 用于测试变量的循环,这要求您设置一个值以最终使 Java 程序脱离循环。
  2. 保存 Java 程序后,转至另一个屏幕以执行以下步骤:
    1. 在命令行上输入 "使用活动作业" (WRKACTJOB) 命令。
    2. 查找运行 Java 程序的批处理立即 (BCI) 作业。 查看 QJVACMDSRV 的子系统/作业列表。 在 "当前用户" 列表下查找您的用户标识。 在 "类型" 下查找 BCI。
    3. 输入选项 5 以使用该作业。
    4. 在 "使用作业" 屏幕的顶部,将显示 "编号" , "用户" 和 "作业"。 Enter 键 STRSRVJOB Number/User/Job
    5. 输入 STRDBG CLASS(classname)。 Classname 是要调试的 Java 类的名称。 它可以是您在 Java 命令上指定的类名,也可以是另一个类。
    6. 该类的源出现在 "显示模块源" 屏幕中。
    7. 只要您希望在该 Java 类中停止,就通过按 F6 (添加/清除断点) 来设置断点。 按 F14 以添加要调试的其他类,程序或服务程序。
    8. 按 F12 (恢复) 以继续运行程序。
  3. 停止保留原始 Java 程序。 当命中断点时, "显示模块源" 屏幕出现在输入了 "启动服务作业" (STRSRVJOB) 命令和 "启动调试" (STRDBG) 命令的屏幕上。 Java 程序结束时,将显示 Job being serviced ended 消息。
  4. 输入 "结束调试" (ENDDBG) 命令。
  5. 输入 "结束服务作业" (ENDSRVJOB) 命令。

调试 Java 程序时, Java 程序实际上正在批处理立即 (BCI) 作业中的 Java 虚拟机中运行。 您的源代码显示在交互式屏幕中,但 Java 程序未在其中运行。 它正在另一个作业 (服务作业) 中运行。 请参阅 QIBM_CHILD_JOB_SNDINQMSG 环境变量主题,以获取有关此变量的更多信息,该变量控制 BCI 作业在调用 Java 虚拟机之前是否等待。