在gdb中,可以通过以下方式显示让我们说出最后一个值:
(gdb) x/5x $sp
0x7fffffffde40: 0x00000001 0x00000000 0xffffe1e9 0x00007fff
0x7fffffffde50: 0x00000000
解释here。但是我想将它添加到自动显示器并且无法提供解决方案。到目前为止,我的尝试仅产生堆栈中最后一个元素的地址:
(gdb) display/5x $sp
1: /x $sp = 0x7fffffffde40
因为display
似乎只是跳过5
。
是否可以在自动显示中显示堆栈的内容?
答案 0 :(得分:1)
gdb的display
命令就像print
命令一样,它们与x
命令略有不同:
display
和print
不在/format
选项中使用重复计数。如果您计算,display
会忽略它,而print
会抱怨它。display
和print
打印表达式的值,但x
获取表达式的值,将其视为地址,并将值打印在该地址的内存中。这就是为什么,在您的示例中,display /x $sp
输出0x7fffffffde40
和x/x $sp
输出0x00000001
。有两种方法可以让display
(和print
)显示从给定地址开始的一系列值:
使用{type}
为表达式(可能是地址,或者值为地址的变量或寄存器)添加前缀,其中type
是数组类型:
display {int[5]}$sp
在表达式中使用@
运算符。 @
表示从其左侧参数的地址开始并包含由其右侧参数指定的元素数的数组:
print *(int *)$sp@5