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.  查看和导航到代码

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.  命令参考

索引

显示和读取堆栈跟踪

堆栈跟踪显示程序流中执行停止位置及执行到达此点的过程。它提供了有关程序状态的最简明的描述。

显示堆栈跟踪,请使用 where 命令。

对于使用 -g 选项编译的函数,由于参数的名称和类型已知,因此显示的是准确值。对于无调试信息的函数,显示的参数值是十六进制数。这些数字未必都有意义。通过函数指针 0 进行函数调用时,函数值显示为一个小的十六进制数,而非符号名。

可以在未使用 -g 选项编译的函数中停止。在此类函数中停止时,dbx 将在堆栈中向下搜索其函数是使用 -g 选项编译的第一个帧,并设置其当前作用域(请参见程序作用域)。这用箭头符号 (=>) 表示。

在以下示例中,main() 是使用 -g 选项编译的,因此会显示符号名以及参数值。main() 调用的库函数不是使用 -g 编译的,因此会显示函数的符号名,但对于参数而言,只会显示 SPARC 输入寄存器 $i0$i5 的十六进制内容。

在以下示例中,程序因段故障而崩溃。造成崩溃的原因很可能是 SPARC 输入寄存器 $i0 中的 strlen() 的参数为空。

(dbx) run
Running: Cdlib
(process id 6723)

CD Library Statistics:

 Titles:         1

 Total time:     0:00:00
 Average time:   0:00:00

signal SEGV (no mapping at the fault address) in strlen at 0xff2b6c5c
0xff2b6c5c: strlen+0x0080:    ld      [%o1], %o2
Current function is main
(dbx) where
  [1] strlen(0x0, 0x0, 0x11795, 0x7efefeff, 0x81010100, 0xff339323), at 0xff2b6c5c
  [2] _doprnt(0x11799, 0x0, 0x0, 0x0, 0x0, 0xff00), at 0xff2fec18
  [3] printf(0x11784, 0xff336264, 0xff336274, 0xff339b94, 0xff331f98, 0xff00), at 0xff300780
=>[4] main(argc = 1, argv = 0xffbef894), line 133 in "Cdlib.c"
(dbx)

有关更多堆栈跟踪示例,请参见查看调用堆栈跟踪调用