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为层数
gdb函数相关7——选择函数堆栈帧
可以看到程序暂停后,最内层的函数帧为第0帧。
执行frame 2命令后,当前堆栈帧变成了func3的函数帧

可以使用i frame命令查看当前函数帧的相关信息
可以看到,func3要去调用func2,调用func3的地址是0x7fffffffdec0,
它要去调用地址为0x7fffffffdec0的函数func2
于是,如果你想通过函数帧地址切换到func2的函数堆栈帧
可以使用命令 frame 0x7fffffffdec0
gdb函数相关7——选择函数堆栈帧