From:	HENRY::IN%"leichter-jerry%YALE.ARPA%SRI-KL.ARPA%relay.cs.net@rca.com" 28-NOV-1986 08:46
To:	info-vax@SRI-KL.ARPA
Subj:	Thanksgiving gift:  DEBUG_{ON,OFF}

I've found the following two command files very useful when doing program
development.  @DEBUG_ON <image> produces a new version of <image> that, when
run, will start up in the Debugger, as if it had been linked /DEBUG.  Any
debugging information available in the image will be used, but obviously what
isn't there can't be used...the effect is really equivalent to typing CTRL/Y -
DEBUG just before the image starts executing.  DEBUG_ON works with any image,
including an image that was linked /NOTRACEBACK.  (Note that such an image
will contain no symbols at all.)

Conversely, @DEBUG_OFF <image> produces a new version of <image> that will NOT
start up in the debugger.  However, any debugging information in the image is
unchanged, so that a later CTRL/Y - DEBUG will have access to all the local
symbol information, etc.  Note that, since the debugger is NOT started, it
will NOT be there to gain control if the image dies due to some sort of excep-
tion (until you type CTRL/Y - DEBUG) (or signal SS$_DEBUG?).

There is one limitation with DEBUG_OFF'ed images:  If you are too fast about
typing CTRL/Y - DEBUG, you may get an error message from the debugger and
end up back in DCL.  I don't know exactly what "too fast" means; empirically,
if you wait for your program to issue a prompt before doing CTRL/Y, it seems
to work.

DEBUG_ON and DEBUG_OFF produce various warning and informational messages as
they run.  Presumably, they'll produce some other messages if something goes
wrong.  Since I've never seen anything go wrong, I don't know what messages to
expect.

Both command procedures take an optional second parameter that is the spec of
the output file - default is a new version of the input file.

				N O T I C E

This stuff is VERY unsupported - by anyone, including me.  "You break it, you
bought it."  It works on VMS V4.3 and V4.4, and will PROBABLY work on other
versions.

Enjoy!
							-- Jerry

------------------------------DEBUG_ON.COM------------------------------------
$ o = ""
$ if p2 .nes. "" then o = "/OUTPUT:" + p2
$ on warning then goto move
$! Try to just turn the "LNKDEBUG" bit on
$ patch/absolute/journal:_NL:'o' 'p1'
examine/word 2
define base = \
!
verify/long base = 7FFEDF68
!
examine/long 20			!get the link flags
deposit/long 20 = <\/2>*2+1	!set the LNKDEBUG bit
!
update
$ exit
$! No previous entry for debugger in vector, do things the hard way:
$! (insert one)
$move:
$ on warning then continue
$ patch/absolute/journal:_NL:'o' 'p1'
examine/word 2
define base = \
!
examine/long base + 8
define contents = \
deposit/long base + 0C = contents
!
examine/long base + 4
define contents = \
deposit/long base + 8 = contents
!
examine/long base
define contents = \
deposit/long base + 4 = contents
!
deposit/long base = 7FFEDF68
!
examine/long 20			!get the link flags
deposit/long 20 = <\/2>*2+1	!set the LNKDEBUG bit
!
update
$done:
------------------------------DEBUG_OFF.COM-----------------------------------
$ o = ""
$ if p2 .nes. "" then o = "/OUTPUT:" + p2
$ patch/absolute/journal:_NL:'o' 'p1'
examine/long 20			!get the link flags
deposit/long 20 = <\/2>*2	!clear the LNKDEBUG bit
!
update
$ exit
-------
