Sun Studio 12:使用 dbx 调试程序

step 命令

step 命令用于单步执行源代码或语句(步入使用 -g 选项编译的调用)。

dbx 环境变量 step_events 控制单步执行过程中是否启用断点。

dbx 环境变量 step_granularity 控制源代码行单步执行的粒度。

dbx 环境变量 step_abflow 控制在检测到将要发生“异常”控制流更改时 dbx 是否停止。 调用 siglongjmp()longjmp() 或异常抛出可能会导致出现此类控制流更改。

本地模式语法

step

单步执行一行(步入调用)。对于多线程程序,步过函数调用时,为了避免死锁,会在该函数调用期间隐式恢复所有线程。非活动线程无法单步执行。

step n

单步执行 n 行(步入调用)。

step up

向下单步执行并步出当前函数。

step ... -sig signal

单步执行时传递指定信号。如果该信号存在信号处理程序,并且使用 -g 选项编译了该信号处理程序,则步入该信号处理程序。

step ...thread_id

单步执行指定线程。不适用于 step up

step ...lwp_id

单步执行指定 LWP。步过函数时,不隐式恢复所有 LWP。

step to [ function ]

尝试步入从当前源代码行调用的 function。如果未指定 function,则步入上一个函数,这有助于避免出现过长的 step 命令和 step up 命令序列。例如,上一个函数为:

f()->s()-t()->last();

last(a() + b(c()->d()));

其中:

n 是要单步执行的行数。

signal 是信号名。

thread_id 是线程 ID。

lwp_id 是 LWP ID。

function 是函数名。

只有指定显式 lwp_id 时,通用 step 命令的死锁避免措施才不起作用。

在执行 step to 命令时,如果尝试步入上一个汇编调用指令或步入当前源代码行中的函数(如果指定),则调用可能因条件分支而无法进行。在不执行调用或当前源代码行中没有函数调用的情况下,step to 命令会步过当前源代码行。使用 step to 命令时,需要特别注意用户自定义的运算符。

有关机器级步进信息,另请参见stepi 命令

Java 模式语法

step

单步执行一行(步入调用)。对于多线程程序,步过方法调用时,为了避免死锁,会在该方法调用期间隐式恢复所有线程。非活动线程无法单步执行。

step n

单步执行 n 行(步入调用)。

step up

向下单步执行并步出当前方法。

step ...thread_id

单步执行指定线程。不适用于 step up

step ...lwp_id

单步执行指定 LWP。步过方法时,不隐式恢复所有 LWP。