Отладка Alpha BASIC для OpenVMS

Я пытаюсь взять на себя некоторые проекты с участием DEC BASIC, A.K.A. ВАКС БЕЙСИК, А.К.А. Альфа БЕЙСИК. Я очень надеюсь встретить здесь кого-то с опытом. Я просмотрел руководство пользователя для VAX/Alpha BASIC, но не могу понять, как отлаживать общий код.

Я могу создавать, компилировать и связывать общий код, я могу отлаживать код, который ссылается на общий код, но я не могу отлаживать общий код. Любая помощь будет принята с благодарностью.

Команды, которые я использую для компиляции и компоновки:

$ BASIC/DEBUG/NOOPTIMIZE COMPARE_DATES_TEST.BAS,COMPARE_DATES.BAS
$ LINK/SHAREABLE/DEBUG COMPARE_DATES.OBJ,COMPARE_DATES_SUB/OPT
$ LINK/DEBUG COMPARE_DATES_TEST,COMPARE_DATES_MAIN/OPT
$ RUN COMPARE_DATES_TEST

Содержимое двух файлов опций:

$ type COMPARE_DATES_SUB.OPT
! COMPARE_DATES_SUB.OPT
SYMBOL_VECTOR=(COMPARE_DATES=PROCEDURE)
$ type COMPARE_DATES_MAIN.OPT
! COMPARE_DATES_MAIN.OPT
COMPARE_DATES/SHAREABLE

В моем общедоступном коде есть ошибка, но я не знаю, где именно, сообщает отладчик:

— SRC: module COMPARE_DATES_TEST$MAIN -scroll-source————————————————————————————
     1: EXTERNAL INTEGER FUNCTION COMPARE_DATES(STRING,STRING)
     2: DECLARE STRING A$, B$
     3: A$ = "01-APR-18"
     4: B$ = "15-MAY-2017"
     5:
->   6: PRINT COMPARE_DATES(A$, B$)
     7: END
— OUT -output———————————————————————————————————————————————————————————————————
stepped to COMPARE_DATES_TEST$MAIN\COMPARE_DATES_TEST$MAIN\%LINE 3
stepped to COMPARE_DATES_TEST$MAIN\COMPARE_DATES_TEST$MAIN\%LINE 4
stepped to COMPARE_DATES_TEST$MAIN\COMPARE_DATES_TEST$MAIN\%LINE 6
%BAS-F-SUBOUTRAN, Subscript out of range
-BAS-I-FROFUN, In external function COMPARE_DATES
-BAS-I-FROMOD, In module COMPARE_DATES_TEST
break on unhandled exception preceding 18446744071563830960
— PROMPT -error-program-prompt——————————————————————————————————————————————————
%DEBUG-I-SOURCESCOPE, source lines not available for %PC in scope number 0
        Displaying source for 6\%PC
DBG>

person geoffb-csharpguy    schedule 06.09.2017    source источник
comment
По умолчанию общедоступное изображение будет загружено из Sys$Share:. Это то место, куда помещается файл, или вы создали логическое имя, указывающее на ваш локальный отладочный образ? (См. раздел 5.4 здесь.)   -  person HABO    schedule 06.09.2017
comment
Я добавил логический DEFINE COMPARE_DATES DRIVE:[FOLDER]COMPARE_DATES.EXE   -  person geoffb-csharpguy    schedule 06.09.2017
comment
Обычно отладчик показывает вам исходный код, когда он останавливается в точке останова, которая здесь является необработанным исключением. Однако отладчик сообщает, что не может найти источники. Обычно отладчик прав.   -  person user2116290    schedule 07.09.2017
comment
Нажмите return слишком рано, так что... Отладчик утверждает, что исключение составляет около 18446744071563830960, то есть ffffffff801ae6b0, которое находится в системном пространстве. Скорее всего, это не тот образ, которым вы делитесь (или он установлен?). Что выдает отладчик show image? Можете ли вы увидеть свое совместно используемое изображение? Каково его адресное пространство? В строке 6 вашего основного файла вы пытались step/into попасть в свое общедоступное изображение?   -  person user2116290    schedule 07.09.2017
comment
Вывод отладчика отображаемого изображения   -  person geoffb-csharpguy    schedule 07.09.2017
comment
Результат Step/Into в строке 6: Output=stepped to SHARE$DEC$BASRTL_CODE0+683200 ---------------------------------------------- ------------------------------ Ошибка=%DEBUG-I-SOURCESCOPE, исходные строки недоступны для %PC в области действия номер 0 Отображение источника для 1\%PC   -  person geoffb-csharpguy    schedule 07.09.2017


Ответы (1)


Слишком длинно для комментария: вы скомпилировали с /NOOPTIMIZE, поэтому я ожидал, что STEP/INTO в строке 6, PRINT COMPARE_DATES(A$, B$), перейдет к COMPARE_DATES в вашем совместно используемом изображении. Я не знаю, почему это не так, здесь. Отладчик прав, у вас нет исходников для DEC$BASRTL. Ваш общий образ не установлен, он находится в вашем адресном пространстве. Кажется, у PRINT проблемы с переданным аргументом. Я бы попробовал SET IMAGE COMPARE_DATES; SET MODULE/ALL; SET BREAK COMPARE_DATES в начальной подсказке отладчика. Это делает все символы отладки общего изображения известными и устанавливает точку останова в вашей функции. И тогда GO должен привести вас к вашей функции. (Я заметил, что у вас одинаковые имена для функции, исходного модуля и общего изображения. Это не должно быть проблемой.)

person user2116290    schedule 07.09.2017
comment
[SET IMAGE COMPARE_DATES...] сработало. Это позволило отладчику войти в общий образ. Огромное спасибо. Однако после того, как я был внутри, я столкнулся с подобной ошибкой. В общем образе есть две функции: COMPARE_DATES, одна из которых вызывается из тестовой программы, а другая — COMPARE_DATES_PARTS. Когда я пытаюсь войти в функцию, которая находится в том же общем образе, это задыхается. Шапка экрана кода и отладчик - person geoffb-csharpguy; 07.09.2017
comment
Вы пытались STEP/INTO использовать функцию COMPARE_DATE_PARTS? Может быть, это может дать вам некоторые подсказки. Для меня это не похоже на проблему отладчика. С другой стороны, я недостаточно знаю BASIC, чтобы понять фрагменты кода, которые вы опубликовали: в main есть COMPARE_DATES(A$, B$), передаются строки, в COMPARE_DATES есть COMPARE_DATE_PARTS(DATE_PART_A%, DATE_PART_B%), передаются целые числа. Так что, вероятно, в COMPARE_DATES больше кода. Вы можете захотеть/нужно показать больше исходного кода. - person user2116290; 07.09.2017