Previous: Interactive mode, Up: Running the program
The interactive mode of mixvm
lets you step by step execution of
programs as well as breakpoint setting. Use next
to step through
the program, running its instructions one by one. To run our
two-instruction hello.mix sample you can do the following:
MIX > load hello Program loaded. Start address: 3000 MIX > pc Current address: 3000 MIX > next MIXAL HELLO WORLD Elapsed time: 1 /Total program time: 1 (Total uptime: 1) MIX > pc Current address: 3001 MIX > next End of program reached at address 3002 Elapsed time: 10 /Total program time: 11 (Total uptime: 11) MIX > pc Current address: 3002 MIX > next MIXAL HELLO WORLD Elapsed time: 1 /Total program time: 1 (Total uptime: 12) MIX > MIX > run Running ... ... done Elapsed time: 10 /Total program time: 11 (Total uptime: 22) MIX >
(As an aside, the above sample also shows how the virtual machine handles cummulative time statistics and automatic program restart).
You can set a breakpoint at a given address using the command
sbpa
(set breakpoint at address). When a breakpoint is set,
run
will stop before executing the instruction at the given
address. Typing run
again will resume program execution. Coming
back to our hello world example, we would have:
MIX > sbpa 3001 Breakpoint set at address 3001 MIX > run Running ... MIXAL HELLO WORLD ... stopped: breakpoint at line 8 (address 3001) Elapsed time: 1 /Total program time: 1 (Total uptime: 23) MIX > run Running ... ... done Elapsed time: 10 /Total program time: 11 (Total uptime: 33) MIX >
Note that, since we compiled hello.mixal with debug info
enabled, the virtual machine is able to tell us the line in the
source file corresponding to the breakpoint we are setting. As a
matter of fact, you can directly set breakpoints at source code lines
using the command sbp LINE_NO
, e.g.
MIX > sbp 4 Breakpoint set at line 7 MIX >
sbp
sets the breakpoint at the first meaningful source code line;
thus, in the above example we have requested a breakpoint at a line
which does not correspond to a MIX instruction and the breakpoint is set
at the first line containing a real instruction after the given one. To
unset breakpoints, use cbpa ADDRESS
and cbp LINE_NO
, or
cabp
to remove all currently set breakpoints. You can also set
conditional breakpoints, i.e., tell mixvm
to interrupt program
execution whenever a register, a memory cell, the comparison flag or the
overflow toggle change using the commands sbp[rmco]
(see Debug commands).
MIXAL lets you define symbolic constants, either using the EQU
pseudoinstruction or starting an instruction line with a label (which
assigns to the label the value of the current memory address). Each
MIXAL program has, therefore, an associated symbol table which you can
inspect using the psym
command. For our hello world sample, you
will obtain the following output:
MIX > psym START: 3000 TERM: 19 MSG: 3002 MIX >
Other useful commands for debugging are strace
(which turns on
tracing of executed intructions), pbt
(which prints a backtrace
of executed instructions) and weval
(which evaluates
w-expressions on the fly). For a complete description of all available
MIX commands, See mixvm.