GDB调试之函数调用栈管理(八)
栈帧:当程序进行函数调用的时候,比如说在哪里调用,这些信息我们称之为栈帧。每一个栈帧的内容包括调用的参数,局部变量,寄存器等这些信息,这就是一个栈帧。
调用栈:所有栈帧组成的信息称之为调用栈,或者我们也可以称之为调用堆栈。栈的特性是后进先出,函数调用也是这样,如果函数1里面调用了函数2,函数里面又调用了函数3,这样就形成了一个函数调用栈1-2-3。函数3是最后被调用,它会最先出栈,即函数3先出栈并执行结束后就会回到函数2,此时函数3的栈帧也就消失了。当开始运行的时候,只有一个栈帧,就是主函数main,每调用一个函数就产生一个新的栈帧。当这个函数调用结束的时候,该函数所对应的栈帧也随之结束。
一、调用栈管理命令
- backtrace/bt:查看栈回溯信息
- frame n:切换栈帧
- info f n:查看栈帧信息
调试代码部分示例:
#include <iostream>
#include <cstring>
#include "test.h"
using namespace std;
void call_test()
{
test_child test;
int zz = test.test_member(10,20);
cout << "zz is " << zz << endl;
}
int main(int argc,char** argv)
{
call_test();
return 0;
}
查看栈回溯信息:

切换栈帧:

查看栈帧信息:

浙公网安备 33010602011771号