实验平台: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 堆栈地址也可以看到堆栈的代码。