2017-09-06 86 views
0

我想接管一些涉及DEC BASIC,A.K.A的项目。 VAX BASIC,A.K.A. Alpha BASIC。我真的希望遇到有经验的人。我已经完成了VAX/Alpha BASIC的用户手册,但我无法弄清楚如何调试可共享的代码。为OpenVMS调试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> 
+0

默认情况下,可共享图像将从“Sys $ Share:”加载。是放置文件的位置,还是您创建了一个逻辑名称以指向您的本地调试图像? (参考第5.4节[这里](http://h41379.www4.hpe.com/doc/84final/4538/4538pro_011.html)。) – HABO

+0

我添加了一个逻辑“DEFINE COMPARE_DATES DRIVE:[FOLDER] COMPARE_DATES.EXE” –

+0

通常,调试器会在停止点处显示源代码,这是一个“未处理的异常”。但调试器报告无法找到源。通常调试器是正确的。 – user2116290

回答

0

太长评论:你跟/NOOPTIMIZE编译,所以我预计在第6行的STEP/INTO,PRINT COMPARE_DATES(A$, B$)将在您的可共享图像中步进到COMPARE_DATES。在这里,我不知道为什么不是这种情况。调试器是正确的,你没有DEC$BASRTL的来源。您的可共享图像未安装,它位于您的地址空间中。看来PRINT与传递的参数有问题。我会在最初的调试器提示符处尝试SET IMAGE COMPARE_DATES; SET MODULE/ALL; SET BREAK COMPARE_DATES。这使得可共享图像的所有调试符号都已知,并在函数中设置了一个断点。然后GO应该让你进入你的功能。 (我注意到,你的功能,源模块和可共享图像的名称相同,这应该不是问题)。

+0

[SET IMAGE COMPARE_DATES ...]工作。它允许调试器进入共享映像。非常感谢你。在我进入后,我遇到了类似的错误。在共享映像中,有两个函数COMPARE_DATES,它们是从测试程序中调用的,另一个是COMPARE_DATES_PARTS。当我尝试进入驻留在相同共享图像中的功能时,会出现扼流圈。 [代码和调试器的屏幕上限](http://oi66.tinypic.com/2drriom.jpg) –

+0

您是否试过''''''''''''''''''''''''COMPARE_DATE_PARTS'''函数?也许这可以给你一些线索。对我来说,这看起来不像调试器问题。另一方面,我不了解BASIC的含义,无法理解您发布的代码片段:主要有一个COMPARE_DATES(A $,B $)字符串,在COMPARE_DATES '''有'''COMPARE_DATE_PARTS(DATE_PART_A%,DATE_PART_B%)'',整数通过。所以在'''COMPARE_DATES'''中可能会有更多的代码。您可能需要/需要显示更多的源代码。 – user2116290