使用gdb有几年了,但仅仅局限于给学生写个demo之类的,几乎没有什么深究。昨天看到一篇帖子,对C程序运行中的程序栈空间比较感兴趣,就来用GDB看下。俗话说工欲善其事,必先利其器。
1、配置gdb,如果配置vim你还不会,可以看我的另外的内容。
首先找到一个非常不错的:https://github.com/gdbinit/gdbinit,没有什么难度,git clone https://github.com/gdbinit/Gdbinit.git,只有两个文件,还有一个readme,将文件直接移动到~下即可,mv Gdbinit/gdbinit ~/.gdbinit完事了
2、vim编辑代码如下,其中1~9行是vim的自动补全注释完成的,其他的你可以照抄,注释还是自己改下吧
1 /* *=+=+=+=+* *** *=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= 2 * 作者代号: *** :guochaoxxl 3 * 版权声明: *** :(魎魍魅魑)GPL3 4 * 联络信箱: *** :guochaoxxl@163.com 5 * 文档用途: *** :深入理解C指针 6 * 文档信息: *** :~/WORKM/testCStack.c 7 * 修订时间: *** :2021年第28周 07月18日 星期日 下午08:29 (199天) 8 * 代码说明: *** :自行添加 9 * *+=+=+=+=* *** *+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+*/ 10 #include <stdio.h> 11 #include <stdlib.h> 12 13 int main(int argc, char **argv) 14 { 15 char stackString[10] = "stackString"; 16 int var1 = 15; 17 char *heapString = (char *)malloc(50*sizeof(char)); 18 19 printf("Enter a string for the stack: "); 20 gets(stackString); 21 printf("Enter a string for the heap: "); 22 gets(heapString); 23 24 printf("Stack string is: %s ", stackString); 25 printf("Stack string is: %x ", &stackString); 26 printf("Heap string is: %s ", heapString); 27 printf("Heap string is: %x ", heapString); 28 printf("var1 is: %d ", var1); 29 printf("var1 is: %x ", &var1); 30 31 32 return 0; 33 }
用vim编辑完上述代码后,直接按下F10就可以一键编译程序了,具体可以查找vim配置完成一键编译的配置
3、进入gdb调试状态
为了避免进入gdb时的半屏提示信息,使用gdb -q命令进入gdb,接着输入file filename,其中filename是你自己的文件名称,我这里是testCStack,就会出现提示符号gdb了