GDB“bt full”输出中的本地值

时间:2016-10-26 10:55:17

标签: gdb

GDB中的“bt full”堆栈跟踪显示了每个帧中的本地。当执行“bt full”时,它是否始终显示函数入口处的本地值或本地的更新值?

1 个答案:

答案 0 :(得分:1)

它显示每帧中当前点的变量值。

这种方法的工作方式是变量的调试信息包含变量位置的描述。 gdb评估此描述,然后从该位置获取值。现在,这可能很复杂(变量可以在一个位置的寄存器中,在另一个位置的内存中;或者堆栈上的结构可以分解为它们的组成部分;等等) - 但在简单的情况下,这只是一些位置堆。因此,如果赋值变量,则会覆盖旧值。

但是,如果您使用的是足够新的gcc和足够新的gdb,则在某些情况下可以查看函数参数的条目值。条目值可能看起来像var@entry = 72。这意味着编译器能够告诉调试器如何计算入口值。这通常通过展开一个帧并评估一个DWARF表达式来完成,该表达式说明如何计算给定调用帧中状态的值。