GDB:将堆栈内容添加到自动显示

时间:2016-07-01 19:40:07

标签: gdb

在gdb中,可以通过以下方式显示让我们说出最后一个值:

(gdb) x/5x $sp
0x7fffffffde40: 0x00000001  0x00000000  0xffffe1e9  0x00007fff
0x7fffffffde50: 0x00000000

解释here。但是我想将它添加到自动显示器并且无法提供解决方案。到目前为止,我的尝试仅产生堆栈中最后一个元素的地址:

(gdb) display/5x $sp
1: /x $sp = 0x7fffffffde40

因为display似乎只是跳过5

是否可以在自动显示中显示堆栈的内容?

1 个答案:

答案 0 :(得分:1)

gdb的display命令就像print命令一样,它们与x命令略有不同:

  • displayprint不在/format选项中使用重复计数。如果您计算,display会忽略它,而print会抱怨它。
  • displayprint打印表达式的值,但x获取表达式的值,将其视为地址,并将值打印在该地址的内存中。这就是为什么,在您的示例中,display /x $sp输出0x7fffffffde40x/x $sp输出0x00000001

有两种方法可以让display(和print)显示从给定地址开始的一系列值:

  • 使用{type}为表达式(可能是地址,或者值为地址的变量或寄存器)添加前缀,其中type是数组类型:

    display {int[5]}$sp
    
  • 在表达式中使用@运算符。 @表示从其左侧参数的地址开始并包含由其右侧参数指定的元素数的数组:

    print *(int *)$sp@5