跳过导航链接 | |
退出打印视图 | |
![]() |
Oracle Solaris Studio 12.3:使用 dbx 调试程序 Oracle Solaris Studio 12.3 Information Library (简体中文) |
堆栈跟踪显示程序流中执行停止位置及执行到达此点的过程。它提供了有关程序状态的最简明的描述。
对于使用 -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)