首页 > 技术文章 > gdb调试

edan 2019-01-30 13:01 原文

在写大的代码量时,最难办的就是遇到段错误,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查看段错误的原因

推荐阅读