Oracle® Solaris Studio 12.4:使用 dbx 调试程序

退出打印视图

更新时间: 2015 年 1 月
 
 

访问作用域

使用 dbx 检查程序的各种元素,需要修改访问作用域。dbx 在表达式求值期间使用访问作用域来实现解析二义符号等目的。 例如,如果键入以下命令,dbx 会使用访问作用域来确定要输出哪个 i

(dbx) print i

每个线程和 LWP 都有自己的访问作用域。在线程间切换时,每个线程都会返回其访问作用域。

访问作用域的组件

访问作用域的某些组件在以下预定义的 ksh 变量中是可见的:

$vscope

当前访问作用域

$vloadobj

当前访问装入对象

$vfile

当前访问文件

$vlineno

当前访问行号

$vclass

$vfunc 所属的类

$vfunc

当前访问函数

当前访问作用域的所有组件相互间保持兼容。例如,如果您访问不包含函数的文件,则当前访问源文件会更新为新的文件名,并且当前访问函数会更新为 NULL

更改访问作用域

    下列命令是更改访问作用域的最常用方法:

  • func

  • file

  • up

  • down

  • frame number

  • pop

  • list procedure

debug 命令和 attach 命令将设置初始访问作用域。

遇到断点时,dbx 会将访问作用域设置为当前位置。如果将 stack_find_source 环境变量设置为 on,则 dbx 会尝试查找并激活有源代码的堆栈帧。

使用 up 命令、down 命令、frame 命令或 pop 命令更改当前堆栈帧后,dbx 将根据新堆栈帧中的程序计数器设置访问作用域。

仅当使用 list 命令时,list 命令使用的行号位置才会更改访问作用域。 在设置访问作用域后,list 命令的行号位置会设置为访问作用域的第一个行号。以后使用 list 命令时,list 命令的当前行号位置会更新,但只要是列出当前文件中的代码行,访问作用域就不会更改。例如,以下命令会导致 dbx 列出 my_func 源的开头,并将访问作用域更改为 my_func

(dbx) list my_func

以下命令会导致 dbx 列出当前源文件的第 127 行,但不会更改访问作用域。

(dbx) list 127

使用 file 命令或 func 命令更改当前文件或当前函数时,访问作用域也会相应地更新。