Machine-instruction level commands behave the same as their source level counterparts except that they operate at the level of single instructions instead of source lines.
To single-step from one machine-instruction to the next machine-instruction, use nexti or stepi.
nexti and stepi behave the same as their source-code level counterparts: nexti steps over functions, stepi steps into a function called from the next instruction (stopping at the first instruction in the called function). The command forms are also the same. See next and step for a description.
The output from nexti and stepi differs from the corresponding source level commands in two ways. First, the output includes the address of the instruction at which the program is stopped (instead of the source code line number); secondly, the default output contains the disassembled instruction.
(dbx) func hand::ungrasp (dbx) nexti ungrasp +0x18: call support (dbx)
Tracing techniques at the machine instruction level work the same as at the source code level, except you use tracei. For tracei, dbx executes a single instruction only after each check of the address being executed or the value of the variable being traced. tracei produces automatic stepi-like behavior: the program advances one instruction at a time, stepping into function calls.
When you use tracei, it causes the program to stop momentarily after each instruction while dbx checks for the address execution or the value of the variable or expression being traced. Using tracei can slow execution considerably.
For more information on trace and its event specifications and modifiers, see Chapter 5, Setting Breakpoints and Traces."
Here is the general syntax for tracei:
tracei event-specification [modifier]
Commonly used forms of tracei are:
tracei step |
Trace each instruction |
tracei next |
Trace each instruction, but skip over calls |
tracei at address |
Trace the given code address |
(dbx) tracei next -in main (dbx) cont 0x00010814: main+0x0004: clr %l0 0x00010818: main+0x0008: st %l0, [%fp - 0x8] 0x0001081c: main+0x000c: call foo 0x00010820: main+0x0010: nop 0x00010824: main+0x0014: clr %l0 .... .... (dbx) (dbx) tracei step -in foo -if glob == 0 (dbx) cont 0x000107dc: foo+0x0004: mov 0x2, %l1 0x000107e0: foo+0x0008: sethi %hi(0x20800), %l0 0x000107e4: foo+0x000c: or %l0, 0x1f4, %l0 ! glob 0x000107e8: foo+0x0010: st %l1, [%l0] 0x000107ec: foo+0x0014: ba foo+0x1c .... ....