gdb调试
在写大的代码量时,最难办的就是遇到段错误,gdb是一个很好的调试工具
参考链接:https://blog.csdn.net/runner668/article/details/79997523
https://blog.csdn.net/liuruiqun/article/details/50314313
1. 段错误是什么
一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址、访问了系统保护的内存地址、访问了只读的内存地址等等情况。这里贴一个对于“段错误”的准确定义(参考Answers.com):
2. 段错误产生的原因
2.1 访问不存在的内存地址
1 #include<stdio.h> 2 #include<stdlib.h> 3 void main() 4 { 5 int *ptr = NULL; 6 *ptr = 0; 7 }
2.2 访问系统保护的内存地址
1 #include<stdio.h> 2 #include<stdlib.h> 3 void main() 4 { 5 int *ptr = (int *)0; 6 *ptr = 100; 7 }
2.3 访问只读的内存地址
#include<stdio.h> #include<stdlib.h> #include<string.h> void main() { char *ptr = "test"; strcpy(ptr, "TEST"); }
2.4 栈溢出
#include<stdio.h> #include<stdlib.h> void main() { main(); }
使用方法:
使用 -g去编译源码,如将编译后的可执行文件命名为app
1.gdb ./app
2.run
3.如果收到信号停止,可以执行 continue 继续执行
4.可以用print xxx查看段错误的原因