gdb和当前函数堆栈

gdb和当前函数堆栈,gdb,stack,Gdb,Stack,所以我知道我当前的区块在epb和esp之间 有没有办法按以下方式打印我的堆栈: 让我们说len=ebp esp 我希望gdb上的命令看起来像这样 x/lenx$esp 所以我要为正在执行的当前函数翻出堆栈上的内容? 我可以使用如下显示方式来执行此操作: 显示/lenx$esp 是否可能有一个每次都会改变的变量 似乎display不允许此操作。因此,您可以定义自己的命令,并在需要查看函数堆栈时简单地调用它: define display_stack eval "x /%dbx $esp", $

所以我知道我当前的区块在epb和esp之间 有没有办法按以下方式打印我的堆栈: 让我们说len=ebp esp 我希望gdb上的命令看起来像这样 x/lenx$esp

所以我要为正在执行的当前函数翻出堆栈上的内容? 我可以使用如下显示方式来执行此操作: 显示/lenx$esp

是否可能有一个每次都会改变的变量

似乎
display
不允许此操作。因此,您可以定义自己的命令,并在需要查看函数堆栈时简单地调用它:

define display_stack
  eval "x /%dbx $esp", $ebp-$esp
end
然后在调试程序时:

(gdb) display_stack
如果您需要在每个步骤上查看函数堆栈,您可以1)定义另一个命令
nn
,并在调试函数时使用它2)将钩子用于伪命令“stop”:

define nn
  n
  display_stack
end

define hook-stop
  echo "hook-stop, display_stack:\n"
  display_stack
end
有用链接:


是的,你可以。例如:显示10个单词:
display/10wx$esp
或例如显示40个字节:
display/40bx$esp
。是的,我知道这种方式,我的问题是是否可能有一个每次都会更改的变量(即len=$ebp-$esp)。因此,当esp更改时,显示屏将计算len的新值,并显示堆栈上的内容。