跳过导航链接 | |
退出打印视图 | |
![]() |
Oracle Solaris Studio 12.3:使用 dbx 调试程序 Oracle Solaris Studio 12.3 Information Library (简体中文) |
机器指令级命令与其对应的源码级命令的功能相同,只不过它们在单步指令级而非源代码行级执行。
要从一个机器指令单步执行到下一个机器指令,请使用 nexti 命令或 stepi 命令
nexti 命令和 stepi 命令与其对应的源代码级命令运行方式相同:nexti 命令步过函数,stepi 命令步入由下一个指令调用的函数(停止于被调用函数中的第一个指令)。命令形式也相同。有关说明,请参见next 命令和step 命令。
nexti 命令和 stepi 命令的输出与其对应的源代码级命令的输出有两点不同:
输出中包含程序停止处的指令地址(而非源代码行号)。
缺省输出中包含反汇编指令,而非源代码行。
例如:
(dbx) func hand::ungrasp (dbx) nexti ungrasp +0x18: call support (dbx)
机器级的跟踪技术与源代码级相同,只是要使用 tracei 命令。执行 tracei 命令时,dbx 只会在每次检查执行的地址或跟踪的变量值后,执行一个指令。tracei 命令会产生类似 stepi 的自动行为。程序一次前进一个指令来步入函数调用。
使用 tracei 命令时,它会使程序在执行每个指令后停止一会儿,这时,dbx 检查地址执行情况或跟踪的变量或表达式的值。使用 tracei 命令会显著降低执行速度。
有关跟踪及其事件规范和修饰符的更多信息,请参见跟踪执行和tracei 命令。
tracei 命令的常规语法如下:
tracei event-specification [modifier]
tracei 命令的常用形式为:
|
有关更多信息,请参见tracei 命令。
SPARC:
(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 .... ....