David Greer has written a good tutorial on this topic, "MPE/iX System Debugger" (Robelle, 1994).
Incidentally, HP-UX has a debugger of its very own called xdb.
abort | = | terminate program |
b | = | break in program, b copy_qedit_file+$640
|
ba | = | break absolute |
bd | = | drop breakpoints |
bl | = | list breakpoints |
bs | = | break in system code, bs HPFOPEN
|
c | = | continue program |
cm | = | switch to CM mode |
datab | = | data breakpoint |
dc | = | dump code, dc pc,20 or dc p-20,40 (CM)
|
ddb | = | dump DB-relative, ddb+6040/2,200,s (CM)
|
dq | = | dump Q-relative, dq-20,20,# (CM)
|
dr | = | dump registers |
ds | = | dump S-relative, ds-5,6 (CM)
|
dv | = | dump virtual, dv [sp-34],10,s
|
help | = | help on any command |
macro | = | define macro |
nm | = | switch to Native Mode |
pb | = | page back in code (won) |
pf | = | page forward in code (won) |
ss | = | single step, update won |
set croff | = | disable autorepeat |
set cron | = | Return repeats last cmd |
tr,d | = | trace, showing CM-NM switches |
use | = | execute file of commands, use macros.pub
|
var | = | set variable (!xxx to use) |
woff | = | windows off |
won | = | windows on |
= (equal sign) | = | calculator |
: (colon) | = | MPE command |
b ?xxx | breaks at the start of a CM procedure (? unneeded for NM) |
b xxx,-1 | removes a breakpoint after one occurrence |
lev 1;b pc,-1 | sets a one-time NM return breakpoint |
lev 1;b p,-1 | sets a one-time CM return breakpoint |
dp+20 | means "value of DP (R27) plus 20" |
[dp+20] | means "the value at the location whose address is the value of R27 plus 20" |
dr r25 | dumps a parameter value in register 25 |
dv r26,10,s | dumps a character array whose address is in register 26 |
var buf=r26 | saves the address in register 26 in variable buf |
dv buf,10, | checks the value even if register 26 no longer contains the address |
The Cseq utility
shows the parameter locations for all MPE intrinsics.
At Robelle we have a
macro file which defines Debugger commands
to dump the parameters of HPFOPEN, FOPEN and other intrinsics.
We activate the macros by putting
use macros.group.account
in our dbuginit file.