|
ANALYZE/PROCESS_DUMP is a VMS utility and is NOT owned by DEBUG.
ANALYZE/PROCESS_DUMP is setting up the environment, e.g. stack, memory,
registers, etc and calling DEBUG much like the image activator would
invoke DEBUG on a ^Y-DEBUG of an up and running program. Indeed the
debugger doesn't even know it is in a process dump recreation.
The ACCVIO looping behavior is disturbing. I can't reproduce it on a
regular V7.1 system and I guess you've decided that it is an artifact of
H7.1. The 000000000002D8BB signal that starts it out is just an
informational signalled from DEBUG during its startup/initialization.
It wants to say, "%DEBUG-I-SSINOTSET, system service interception is not
setup, defaulting to nostatic watchpoints"...again, it doesn't know that
it is a process dump recreation versus a real up and running program. I
suspect that the stack setup by ANALYZE/PROCESS_DUMP was improper and
DEBUG towards the end of its initialization is ACCVIOing while trying
to walk that stack to the exception context. I suspect that because of
the way DEBUG sets up its handlers and because of its over aggressive
or in some cases lack of internal error handling...it ends up sending itself
back to the stack walk for each ACCVIO, and thereby, back to the next ACCVIO.
The DEBUG internal error handling during startup was re-worked for V7.2
...I'm reasonably confident that this looping behavior will change to
a clean exit. Unfortuately, there is nothing DEBUG can do for the user
if it can't at least walk the stack back to the exception causing frame.
The %SYSTEM-F-VA_IN_USE is something that I believe comes out of
ANALYZE/PROCESS_DUMP...it certainly does NOT come from DEBUG. In these
cases ANALYZE/PROCESS_DUMP is quitting BEFORE invoking the debugger. My
understanding is that we should only see %SYSTEM-F-VA_IN_USE when a dump is
moved to and analyzed on a system with a virtual memory layout that is
incompatible with the layout on the system where the dump was generated. We
should not be seeing this on the same system...at least, that's my
understanding...but you are right, I can recreate this problem easily. To
me, it looks like ANALYZE/PROCESS_DUMP is doing something very wrong with
its /IMAGE switch.
I suggest that you enter a QAR or SPR (CLD?) against ANALYZE/PROC.
There is a little known work around, however, for this problem. Instead of
linking /DEBUG to get a image with debug info...link /DSF. That is, for
ALPHA, you can link a .DSF and a new .EXE. Note that you can't use the /DSF
/NOEXE combination (sigh) the linker will reject that and insist that you
generate a new EXE as well as the DSF. ALL the debug information is in
the .DSF file. (DSFs are usually used with the system code debugger, SCD,
for debugging system and device driver code.) Then define the little known
DEBUG DBG$IMAGE_DSF_PATH logical to point to the directory where the DSF
lives...I believe that the DSF must be the same name as the EXE and DMP, e.g.
TEST.EXE and TEST.DSF and TEST.DMP...they do NOT, however, need to be in the
same directory. That logical will tell debug to get the debug info from the
DSF instead of the EXE.
For example, I took your C example and called it 1867_4.C, compiled, linked
/NODEBUG, and generated a dump, analyzed the dump, generated a DSF, defined
the DBG$IMAGE_DSF_PATH logical, and reanalyzed the dump (BTW, the
DBG$DECW$DISPLAY logical simply forces the debugger into its character cell,
SMG, interface versus the Motif GUI):
$ ty 1867_4.c
#include <lib$routines.h>
main ()
{lib$signal(12);}
$
$
$ cc/debug/noopt 1867_4.c
$ link 1867_4
$ set proc/dump
$ run 1867_4
%SYSTEM-F-ACCVIO, access violation, reason mask=E4, virtual address=000000000000001B,
PC=0000000000010030, PS=7B0E839D
%TRACE-F-TRACEBACK, symbolic stack dump follows
image module routine line rel PC abs PC
1867_4 1867_4 main 3924 00000000000000E4 00000000000200E4
1867_4 1867_4 __main 0 0000000000000090 0000000000020090
0 FFFFFFFF8207E914 FFFFFFFF8207E914
$
$
$ define dbg$decw$display " "
%DCL-I-SUPERSEDE, previous value of DBG$DECW$DISPLAY has been superseded
$ ana/proc 1867_4
Condition signalled to take dump:
%SYSTEM-F-ACCVIO, access violation, reason mask=E4, virtual address=000000000000001B,
PC=0000000000000003, PS=00002604
%DEBUG-I-SSINOTSET, system service interception is not setup, defaulting to nostatic
watchpoints
OpenVMS Alpha DEBUG Version V7.1-02R
predefined trace on activation at 1867_4\main\%LINE 3924+20 in %PROCESS_NUMBER 1
DBG_1> sho call
module name routine name line rel PC abs PC
*1867_4 3924 0000000000000000 00000000000200E4
*1867_4 __main 0000000000000090 0000000000020090
0000000000000000 FFFFFFFF8207E914
DBG_1> set radix hex
DBG_1> ex/source 00000000000200E4
module 1867_4
%DEBUG-W-SRCLINNOT, source lines not available for module 1867_4
DBG_1> exit
$
$
$ link/dsf 1867_4
$ dir/date/size/owner 1867_4
Directory REDSQL$:[HILDE.ADEBUG.DUMP]
1867_4.C;1 1 3-JUN-1997 14:30:31.25 [HILDE]
1867_4.DMP;1 368 3-JUN-1997 14:31:28.82 [HILDE]
1867_4.DSF;1 5 3-JUN-1997 14:38:55.41 [HILDE]
1867_4.EXE;2 5 3-JUN-1997 14:38:55.50 [HILDE]
1867_4.EXE;1 7 3-JUN-1997 14:31:18.16 [HILDE]
1867_4.OBJ;1 5 3-JUN-1997 14:30:55.77 [HILDE]
Total of 6 files, 391 blocks.
$
$ define dbg$image_dsf_path REDSQL$:[HILDE.ADEBUG.DUMP]
$
$ ana/proc 1867_4
Condition signalled to take dump:
%SYSTEM-F-ACCVIO, access violation, reason mask=E4, virtual address=000000000000001B,
PC=0000000000000003, PS=00002604
%DEBUG-I-SSINOTSET, system service interception is not setup, defaulting to nostatic
watchpoints
OpenVMS Alpha DEBUG Version V7.1-02R
predefined trace on activation at 1867_4\main\%LINE 3924+20 in %PROCESS_NUMBER 1
DBG_1> sho call
module name routine name line rel PC abs PC
*1867_4 3924 0000000000000000 00000000000200E4
*1867_4 __main 0000000000000090 0000000000020090
0000000000000000 FFFFFFFF8207E914
DBG_1> set radix hex
DBG_1> ex/source 00000000000200E4
module 1867_4
3924: {lib$signal(12);}
DBG_1> exit
$
Lon
|
|
/DSF as a linker feature is supported today on ALPHA. Not sure when that
became "official", V6.x I think. However, it's not planned to ever appear
in VAX linkers. No reason it couldn't be put into VAX linkers...just
not planned...and that's all that would need to change, I think. That is,
I believe the DBG$IMAGE_DSF_PATH code in the debugger is NOT platform
specific.
Oddly, the use of the DBG$IMAGE_DSF_PATH logical is documented in the
V7.1 linker manual under its /DSF qualifier documentation...BUT it is
missing from the V7.1 Debugger Manual. This will be set right in the
V7.2.
You're right...using the /DSF switch alone, i.e. without the /DEBUG
switch, will link an EXE and DSF. That EXE will RUN/NODEBUG by default
and all the debug information will be in the DSF. Indeed products
should consider doing exactly that and save the DSF for use later
when (an if?) problems are reported from the field. With the
DBG$IMAGE_DSF_PATH feature and the various optimized debugging features
we support, they would then have the option of symbolically debugging
their actual production images.
Lon
|