GDB调试之函数调用栈管理(八)

栈帧:当程序进行函数调用的时候,比如说在哪里调用,这些信息我们称之为栈帧。每一个栈帧的内容包括调用的参数,局部变量,寄存器等这些信息,这就是一个栈帧。

调用栈:所有栈帧组成的信息称之为调用栈,或者我们也可以称之为调用堆栈。栈的特性是后进先出,函数调用也是这样,如果函数1里面调用了函数2,函数里面又调用了函数3,这样就形成了一个函数调用栈1-2-3。函数3是最后被调用,它会最先出栈,即函数3先出栈并执行结束后就会回到函数2,此时函数3的栈帧也就消失了。当开始运行的时候,只有一个栈帧,就是主函数main,每调用一个函数就产生一个新的栈帧。当这个函数调用结束的时候,该函数所对应的栈帧也随之结束。

一、调用栈管理命令

  • backtrace/bt:查看栈回溯信息
  • frame n:切换栈帧
  • info f n:查看栈帧信息

调试代码下载地址

调试代码部分示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#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 @   TechNomad  阅读(252)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2019-01-14 转:HTTP协议简介
点击右上角即可分享
微信分享提示