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;
}

查看栈回溯信息:

切换栈帧:

查看栈帧信息:

  

posted @ 2024-01-14 14:07  TechNomad  阅读(31)  评论(0编辑  收藏  举报