Есть ли способ найти точный номер строки, которая вызывает абенд (например, SO4C), по смещению (например, offset +00007D0A at address 1515CD0A
), указанному в спуле с сообщением об ошибке?
Исчезнуть причинную линию
Ответы (1)
Если ваша программа скомпилирована с параметрами OFFSET,NOLIST, вы получите список команд/номеров строк в выходном листинге, который содержит "смещение" от начала программы. Номер строки в списке, который имеет ближайшее смещение, но меньшее или равное «смещению», указанному в абенде, — это то место, где вы хотите искать.
Если вы используете NOOFFSET,LIST, вы получите «сгенерированный ассемблер» в своем листинге компиляции, и ваше «смещение» abend должно точно совпадать со «смещением» одной из сгенерированных инструкций, и вы сможете легко идентифицировать Исходная строка COBOL из этого, это первый глагол с номером строки перед перечисленной фактической машинной инструкцией.
Имейте в виду, что в тех редких случаях, когда вам удалось перезаписать программный код и это в конечном итоге вызвало отказ, вам придется потрудиться, но для «обычного» отказа это довольно просто.
Если вы используете параметры компилятора NOLIST,NOOFFSET, вы ничего не поймете. Повторно запустите компиляцию с одним из установленных параметров. Если размеры программ не одинаковы, снова запустите задание отмены.
Если вы используете LIST,OFFSET, компилятор выдаст диагностическое сообщение, и вам придется выбрать один из допустимых вариантов. LIST и OFFSET являются взаимоисключающими.