так в случае SYSPRINT DD DSN= в наборе данных нет сообщений IBM537I 'ONCODE'=8097 DATA EXCEPTION IN STATEMENT 187 AT OFFSET +00035E IN PROCEDURE WITH ENTRY K0102A0 ? и Вы не ответили, каким компилятором компилируется программа в OS/390. В MVS это PLI v2r3 а в OS/390 что? в первой строке листинга это легко видеть: 15688-235 IBM PL/I for MVS & VM Ver 1 Rel 1 Mod 1 with MLE 15655-H31 IBM® Enterprise PL/I for z/OS
Gregory, в обеих системах одна и та же версия PLI: Дата: Понедельник, 21.05.2012, 13:17 | Сообщение # 9 AKonev, в обеих системах: PLI.V2R3M0.PLIBASE PLI.V2R3M0.PLICLIST PLI.V2R3M0.PLICMD PLI.V2R3M0.PLICOMP PLI.V2R3M0.PLIHELP PLI.V2R3M0.PLILINK PLI.V2R3M0.PLIPROC PLI.V2R3M0.PLISAMP PLI.V2R3M0.PLISMAC PLI.V2R3M0.PLITASK PLI.V2R3M0.SAQACMD PLI.V2R3M0.SAQAMLIB PLI.V2R3M0.SAQAPNLS PLI.V2R3M0.SIBMBASE PLI.V2R3M0.SIBMLINK
но содержимое библиотек несколько отличается. Да, совершенно верно, в файле sysprint , когда пишем в файл тоже нет этих двух строк .
Сообщение отредактировал mentor - Пн, 28.05.2012, 20:15
загрузочный модуль прикладной программы? пробовали. Оттуда они и перенесены были, до пеорекомпиляции. С PLI.V2R3M0.PLIBASE и PLI.V2R3M0.SIBMBASE из MVS в steplibe для выполнения тоже пробовали.
Осталось все библ PLI из MVS перекатологизировать под OS/390 и прогнать попробовать.
загрузочный модуль прикладной программы? пробовали. Оттуда они и перенесены были, до пеорекомпиляции. С PLI.V2R3M0.PLIBASE и PLI.V2R3M0.SIBMBASE из MVS
и поведение загрузочного модуля было не такое как в MVS? То есть один и тот же бинарный код в MVS и OS390 ведет себя по-разному?
Сообщение отредактировал Gregory - Ср, 30.05.2012, 11:33
Gregory, в данном случае поведение загрузочного модуля в обеих системах одинаково. Завершается с ошибкой, но сообщение об ошибке IBM537I 'ONCODE'=8097 DATA EXCEPTION, которое под MVS идет в SYSPRINT, система OS/390 "проглатывает". Куда уходит сообщение, непонятно.
поведение загрузочного модуля в обеих системах одинаково... но сообщение об ошибке ... которое под MVS идет в SYSPRINT, система OS/390 "проглатывает".
я это и имел в виду под "поведением", понятно. Но у меня еще вот какой вопрос возник: в листинге я вижу что пункт задания завершается нормально с кодом 100, но появление ONCODE должно приводить к user abend 8097, следовательно у Вас в программе обрабатывается аварийное завершение? В таком случае хорошо бы взглянуть на то, что в программе написано по поводу обработки аварийного завершения - содержимое ON ERROR или ON FINISH
ON ERROR BEGIN; ON ERROR SYSTEM; CWZ=100; GOTO FIN; END; . . . . . . . . . .
FIN: CLOSE FILE(SYSPRINT); CALL PLIRETC(CWZ); PUT SKIP EDIT((58)'*')(SKIP,SKIP,COL(32),A); PUT EDIT( '* ПРОТОКОЛ РАБОТЫ МОДУЛЯ K0102A0 *')( SKIP,COL(32),A);
Я бы прежде всего попробовал убрать CLOSE FILE(SYSPRINT), тем более что в коде SYSPRINT неявно открывается после CLOSE: CLOSE FILE(SYSPRINT); ... PUT SKIP EDIT... PUT EDIT... Или этот CLOSE как раз и появился как попытка исправить ситуацию? А OPEN FILE(SYSPRINT) в программе присутствует? Явное закрытие неявно открытого файла в принципе допустимо, но может провоцировать ошибки. Такие ситуации обсуждают, например, здесь ibmmainframes.com/about55738.html
А выдаются ли сообщения если не обрабатывать ошибку (без ON ERROR)?
закрыли SYSPRINT по рекомендации форумчан. Как видите, ничего не изменилось. ок, попробуем завтра без ON ERROR. Но все это, скорее всего, как мертвому припарка. Все равно нужно обрабатывать в программе ошибочные ситуации. А где собака зарыта, неужели никто не знает?! :-(
Добавлено (31.05.2012, 09:03) --------------------------------------------- Gregory, по Вашей рекомендации закрыли ON ERROR и прогнали в обеих системах. Реакция систем несколько разная. в MVS IEF142I K010108Q ST10 - STEP WAS EXECUTED - COND CODE 2000
в файле SYSPRINT:
IBM537I 'ONCODE'=8097 DATA EXCEPTION IN STATEMENT 183 AT OFFSET +000340 IN PROCEDURE WITH ENTRY K0102A0
********************************* TOP OF DATA ********************************** IBM0537S ONCODE=8097 Data exception From compile unit K0102A0 at entry point K0102A0 at statement 183 at compile unit offset +00000342 at address 091005CA.
и гонит CEEDUMP.
прогресс налицо! :-)
коды несколько разные. Как сделать, чтоб с ON ERROR тоже ошибки выдавались? Почему они перехватываются, кем и куда деваются? c //SYSOUT DD SYSOUT=X прогоняли ранее.
Теперь можно считать достоверно установленным, что среда run-time разная и в OS/390 это явно LE. Почему при активном ON ERROR сообщения IBM0537S теряются, пока непонятно. По идее, они должны быть в SYSOUT DD. Предлагается для начала посмотреть LE run-time параметры: //XXST10 EXEC PGM=K0102A02,PARM='/RPTOPTS(ON)' активные параметры должны быть выведены в SYSOUT DD. Интересует прежде всего MSGFILE. Кроме этого, я здесь вижу REGION=2048K, зачем это? Попробуйте указать REGION=0M
Остается непонятным также, как активировать старую среду для модуля, компилированного в MVS, почему STEPLIB недостаточно.
Quote
Akonev: Или тащить среду исполнения в каждую новую версию MVS/OS3890/zOS. Последнее проверено и работает для старого советского PL/I даже в последних версиях z/OS.
Возможно, Александр расскажет нам подробнее, как именно это достигается?
Сообщение отредактировал Gregory - Чт, 31.05.2012, 11:31