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; } |
查看栈回溯信息:
切换栈帧:
查看栈帧信息:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2019-01-14 转:HTTP协议简介