我正在开发一个部署在 HP Nonstop 上的 Cobol 应用程序。在平台上调试我遇到了以下情况:
IF LABELED-VALUE OF IN-VARIABLE-1 OF PARENT-1 OF GRAND-PARENT THEN
MOVE IN-VARIABLE-2 OF PARENT-2 OF GRAND-PARENT TO OUT-VARIABLE
ELSE
MOVE IN-VARIABLE-1 OF PARENT-1 OF GRAND-PARENT TO OUT-VARIABLE
END-IF
字段定义如下:
01 GRAND-PARENT
03 PARENT-1.
05 IN-VARIABLE-1 PIC 9(3).
88 LABELED-VALUE VALUE 000.
03 PARENT-2.
05 IN-VARIABLE-2 PIC 9(3).
01 OUT-VARIABLE PIC 9(3).
当我评估表达式时,LABELED-VALUE OF IN-VARIABLE-1 OF PARENT OF GRAND-PARENT
我的调试器告诉我表达式是TRUE
. 的值为IN-VARIABLE-1 OF PARENT OF GRAND-PARENT
0。因此OUT-VARIABLE
应该具有相应的值。但这种情况并非如此; 它始终具有值IN-VARIABLE-1
,并且逻辑始终进入ELSE
.
在这里您可以看到我的调试器中执行代码后的情况:
到目前为止我尝试过的内容:
- 调整 的条件
IF
以检查特定值,例如IF IN-VARIABLE-1 OF PARENT OF GRAND-PARENT EQUAL ZERO THEN
(ZERO
实际上是 的值LABELED-VALUE
) - 我的调试器会显示旧版本的代码,但会显示最新版本的执行行指示器。这可能导致指标显示在错误的行前面。为了避免这种情况,我对注释进行了更改,重新编译,重新启动服务器类并重新附加到进程。这样做我实际上已经获得了最新版本的源代码,因此我可以排除这个问题。
我不是 Cobol 专家,虽然我认为简单IF
可以管理,但无济于事。有人可以帮我吗?
更新:
在我的调试器中,我可以编辑字段的值。如果我用 if或if 之前再次覆盖现有值000
,则代码可以正常工作。怎么回事?IN-VARIABLE-1 OF PARENT-1 OF GRAND-PARENT
0
000