gdb函数相关7——选择函数堆栈帧
测试代码
#include <stdio.h>
int func1(int a) {
return 2 * a;
}
int func2(int a) {
int c = 0;
c = 2 * func1(a);
return c;
}
int func3(int a) {
int c = 0;
c = 2 * func2(a);
return c;
}
int main (int argc, char *argv[]) {
printf("%d\n", func3(10));
return 0;
}
测试过程
在调试时的程序暂停过程中,可以使用命令
frame n
来选择函数堆栈帧,其中n为层数
可以看到程序暂停后,最内层的函数帧为第0帧。
执行frame 2命令后,当前堆栈帧变成了func3的函数帧
可以使用
i frame
命令查看当前函数帧的相关信息
可以看到,func3要去调用func2,调用func3的地址是0x7fffffffdec0,
它要去调用地址为0x7fffffffdec0的函数func2
于是,如果你想通过函数帧地址切换到func2的函数堆栈帧
可以使用命令frame 0x7fffffffdec0