【问题标题】:GDB: Adding contents of stack to auto displayGDB:将堆栈内容添加到自动显示
【发布时间】:2016-11-04 07:22:37
【问题描述】:

在 gdb 中,可以通过以下方式显示堆栈上的最后 5 个值:

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

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

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

display 似乎只是跳过了5

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

【问题讨论】:

    标签: gdb


    【解决方案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
      

    【讨论】:

      猜你喜欢
      • 2020-12-18
      • 2021-01-05
      • 2015-03-03
      • 1970-01-01
      • 1970-01-01
      • 2019-09-02
      • 1970-01-01
      • 2011-12-12
      相关资源
      最近更新 更多