Ошибка программы RPG: в файле обнаружена ошибка MCH3601 - PullRequest
0 голосов
/ 06 мая 2020

Мы столкнулись с очень странной проблемой с одной из наших программ RPGLE, которая периодически выдает указанную ошибку.

Это происходит специально в строке, где выполняется операция записи в формат записи подфайла. Я отладил и проверил все значения, присвоенные переменным во время выполнения, и не смог найти абсолютно никаких проблем. На странице https://www.ibm.com/support/pages/node/644069 IBM я могу только предположить, что это может быть связано с определениями параметров программ, вызываемых внутри RPG. Но я проверил параметры каждого вызова прототипной программы, и, похоже, все синхронизировано c.

Может ли кто-нибудь указать направление к go, чтобы выяснить причину root проблемы?

1 Ответ

1 голос
/ 06 мая 2020

Но я проверил параметры каждого вызова прототипа программы

Если вы правильно используете прототипы, ie. существует один прототип, определенный в отдельном исходном элементе, и он /INCLUDE в ОБЕ вызывающий и вызываемый ...

Тогда вызовы прототипов не являются проблемой, пока вы правильно обрабатываете любые параметры *OMIT и *NOPASS.

Посмотрите на любые вызовы в старом стиле CALL или CALLB и везде, где вы не используете прототипы должным образом ... это означает, что как в вызывающем, так и в вызываемом коде есть явный PR-код.

Примечание что вы взрывает не просто вызовы старого стиля, сделанные программой, это вызовы, сделанные в любом месте цепочки вызовов.

И если программа неоднократно вызывается с LR = * OFF или без восстановления ресурсов, тогда это может быть любой вызов цепочки вызовов в старом стиле.

Наконец, вызовы старого стиля включают любые сделано программами CL или CLLE.

Удачи!

...