JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris Studio 12.3:使用 dbx 调试程序     Oracle Solaris Studio 12.3 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  dbx 入门

2.  启动 dbx

3.  定制 dbx

4.  查看和导航到代码

导航到代码

导航到文件

导航到函数

从 C++ 二义函数名称列表中选择

在多个具体值中进行选择

打印源码列表

在调用堆栈中移动以导航到代码

程序位置的类型

程序作用域

反映当前作用域的变量

访问作用域

访问作用域的组件

更改访问作用域

使用作用域转换操作符限定符号

反引号操作符

C++ 双冒号作用域转换操作符

块局部操作符

链接程序名

查找符号

打印符号具体值列表

确定 dbx 使用哪个符号

作用域转换搜索路径

放宽作用域查找规则

查看变量、成员、类型和类

查找变量、成员和函数的定义

查找类型和类的定义

目标文件和可执行文件中的调试信息

目标文件装入

列出模块的调试信息

列出模块

查找源文件和目标文件

5.  控制程序执行

6.  设置断点和跟踪

7.  使用调用堆栈

8.  求值和显示数据

9.  使用运行时检查

10.  修复并继续

11.  调试多线程应用程序

12.  调试子进程

13.  调试 OpenMP 程序

14.  处理信号

15.  使用 dbx 调试 C++

16.  使用 dbx 调试 Fortran

17.  使用 dbx 调试 Java 应用程序

18.  在机器指令级调试

19.  将 dbx 与 Korn Shell 配合使用

20.  调试共享库

A.  修改程序状态

B.  事件管理

C.  宏

D.  命令参考

索引

程序作用域

作用域是按变量或函数的可见性定义的程序子集。如果某个符号的名称在给定执行点是可见的,则称该符号“在作用域内”。在 C 语言中,函数可以具有全局或文件静态作用域;变量可以具有全局、文件静态、函数或块作用域。

反映当前作用域的变量

以下变量总是反映当前线程或 LWP 的当前程序计数器,而且不受更改访问作用域的各种命令的影响:

$scope

当前程序计数器的作用域

$lineno

当前行号

$func

当前函数

$class

$func 所属的类

$file

当前源文件

$loadobj

当前装入对象

访问作用域

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

(dbx) print i

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

访问作用域的组件

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

$vscope

当前访问作用域

$vloadobj

当前访问装入对象

$vfile

当前访问文件

$vlineno

当前访问行号

$vclass

$vfunc 所属的类

$vfunc

当前访问函数

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

更改访问作用域

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

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

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

使用 up 命令(请参见up 命令)、down 命令(请参见down 命令)、frame number 命令(请参见frame 命令)或 pop 命令(请参见pop 命令)更改当前堆栈帧时,dbx 根据新的堆栈帧中的程序计数设置访问作用域。

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

(dbx) list my_func

如果键入以下内容,dbx 会列出当前源文件的第 127 行,但不会更改访问作用域。

(dbx) list 127

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