Sun Studio 12 Update 1:使用 dbx 调试程序

设置数据更改断点

可以在 dbx 中使用数据更改断点来记录变量或表达式的值的更改时间。

访问地址时停止执行

要在访问内存地址时停止执行,请键入:


(dbx) stop access mode address-expression [, byte-size-expression]

mode 指定内存访问模式。可由以下一个或所有字母组成:

r

已读取指定地址处的内存。

w

已写入内存。

x

已执行内存。

mode 还可以包含以下任一项:

a

访问后停止进程(缺省值)。

b

访问前停止进程。

在这两种情况下,程序计数器都将指向访问指令。“之前”和“之后”都具有副作用。

address-expression 是求值结果为地址的任何表达式。如果提供符号表达式,则会自动推导出要监视的区域大小;可以通过指定 byte-size-expression 将其覆盖。也可以使用非符号、无类型地址表达式,在这种情况下,必须提供大小。

在以下示例中,将在读取了内存地址 0x4762 之后在任意四个字节后停止执行:


(dbx) stop access r 0x4762, 4

在以下示例中,将在写入变量速度前停止执行:


(dbx) stop access wb &speed

使用 stop access 命令时请记住下列要点:

有关指定访问事件的更多信息,请参见access mode address-expression [, byte-size-expression ]stop 命令

变量更改时停止执行

要在指定变量的值更改时停止程序执行,请键入:


(dbx) stop change variable

使用 stop change 命令时请记住下列要点:

有关指定更改事件的更多信息,请参见change variablestop 命令

dbx 实现的 stop change 操作是自动单步执行且每一步都检查值。如果库未使用 -g 选项进行编译,则单步执行会跳过库调用。因此,如果控制按以下方式流动,dbx 便不会跟踪嵌套的 user_routine2,因为跟踪会跳过库调用和对 user_routine2 的嵌套调用。


   user_routine calls
      library_routine, which calls
        user_routine2, which changes variable

variable 值的更改是在从库调用返回后便已发生,而不是在 user_routine2 中发生的。

dbx 无法为块局部变量({} 中嵌套的变量)中的更改设置断点。如果尝试在块局部“嵌套”变量中设置断点或跟踪,dbx 会发出错误,说明无法执行此操作。


注 –

与使用 change 事件相比,使用 access 事件监视数据更改的速度更快。access 事件不是自动单步执行程序,而是使用速度更快的硬件或 OS 服务。


条件停止执行

要在条件语句的求值结果为 true 时停止程序执行,请键入:


(dbx) stop cond condition

condition 发生时,程序便停止执行。

使用 stop cond 命令时请记住下列要点:

有关指定条件事件的更多信息,请参见cond condition-expressionstop 命令