调用堆栈代表当前处于活动状态的所有例程,即那些已调用但尚未返回各自调用方的例程。 在该堆栈中,函数及其参数按其调用顺序存放。堆栈跟踪显示程序流中执行停止位置及执行到达此点的过程。它提供了有关程序状态的最简明的描述。
要显示堆栈跟踪,请使用 where 命令:
(dbx) stop in printf (dbx) run (dbx) where [1] printf(0x10938, 0x20a84, 0x0, 0x0, 0x0, 0x0), at 0xef763418 =>[2] printit(msg = 0x20a84 "hello world\n"), line 6 in "t.c" [3] main(argc = 1, argv = 0xefffe93c), line 13 in "t.c" (dbx)
对于使用 -g 选项编译的函数,参数名及其类型是已知的,因此会显示精确的值。对于无调试信息的函数,显示的参数值是十六进制数。这些数字未必都有意义。例如,在上述堆栈跟踪中,帧 1 所示为 SPARC 输入寄存器 $i0 至 $i5 的内容,但仅寄存器 $i0 至 $i1 的内容有意义,因为只有两个参数传递到单步执行程序 所示的示例中的 printf。
可以在未使用 -g 选项编译的函数中停止。在此类函数中停止时,dbx 在堆栈内向下搜索其函数是使用 -g 选项编译的第一帧(本例中为 printit()),并为其设置当前作用域。这用箭头符号 (=>) 表示。