《100-gdb-tips》——查看调用堆栈

实验平台:wsl - debian

 1 #include <stdio.h> 
 2 
 3 int func1(int a)
 4  { 
 5     return 2 * a; 
 6  }
 7  
 8  int func2(int a) 
 9  { 
10     int c = 0;
11     c = 2 * func1(a);
12     return c; 
13  }
14  
15  int func3(int a)
16  {
17     int c = 0; 
18     c = 2 * func2(a); 
19     return c; 
20  }
21  
22  int main(void) 
23  { 
24     printf("%d\n", func3(10));
25     return 0; 
26  }
View Code

 

第一步:gdb启动程序

 

 打断点:b test.c:5

 

第二步:查看堆栈

 

调用方的堆栈层级高于被调用的的堆栈层级 

第三步:用 frame n 可以查看堆栈的执行代码

 

 第四步: frame  n  之后可以用 i frame 查看n层堆栈的地址

 

 frame 堆栈地址也可以看到堆栈的代码。

 

第五步 向上或向下切换函数堆栈帧 up n  或者 down n 

 

posted @ 2021-08-27 14:53  岁岁年年  阅读(1056)  评论(0编辑  收藏  举报