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; }
查看栈回溯信息:
切换栈帧:
查看栈帧信息: