【听歌】GDB入门教程之查看函数调用堆栈

本文介绍了如何使用GDB查看和分析程序的函数调用堆栈,包括backtrace、frame、up/down命令的使用,以及info命令获取详细栈帧信息。通过递归计算斐波拉契数列的示例,阐述了栈和栈帧的概念,帮助理解程序执行流程。
摘要由CSDN通过智能技术生成

写在前面:又到周末啦~上上周忍痛买了个雅马哈声卡和 AKG 话筒,这周六才正式打开试用了下,效果还不错,我自己还挺享受的。不过这玩意儿太高端,还不会用 AI 调音。小伙伴们感觉下这首加了一点点电音效果的歌曲如何呢等我慢慢摸熟了,后面更文的频率可能会高些吧,哈哈哈。 

除了使用 GDB 启动调试、暂停/恢复程序执行和查看变量外,另外一个重要的调试方法便是查看程序的函数调用堆栈情况。

调用堆栈是当前函数之前的所有已调用函数的列表,每个函数及其变量都被分配了一个 "栈帧",使用 GDB 查看函数调用堆栈可清晰地看到各个函数的调用顺序以及各函数的输入形参值,是分析程序的执行流程和输入依赖的重要手段。

为了便于讲解,本文基于下述通过递归算法计算斐波拉契数列的简单 demo 进行举例说明。

#include<stdio.h>
#include<stdlib.h>
        
int fibonacci(int n)
{
    if (n == 1 || n == 2)
    {
        return 1;
    }

    int i = n;  // only for showing local variable in GDB
    return fibonacci(n - 1) + fibonacci(n - 2);
}
        
int main()
{
    int n = 10;
    int ret = 0;
    ret = fibonacci(n);
    printf("fibonacci(%d)=%d\n", n, ret);
    return 0;
}

1. backtrace 命令

要查看当前的堆栈信息,可使用 backtrace 命令 (缩写形式 bt)。堆栈中的每个函数都被分配了一个编号,最近被调用的函数在 0 号帧中 (栈顶)。

backtrace n 表示只打印栈顶上 n 层的栈信息 (n 表示一

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值