gdb调试

Posted 孤~狼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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查看段错误的原因

以上是关于gdb调试的主要内容,如果未能解决你的问题,请参考以下文章

代码调试篇:gdb调试快速入门指南

GDB代码调试与使用

GDB调试

使用GNU/gdb调试Linux C/C++可执行程序查看出错源代码、设置断点

代码调试工具GDB

代码调试篇:如何编写 gdb 自定义命令