C++段错误(Segmentation fault)快速定位的解决方法

 更新时间:2024年07月05日 09:34:08   作者:昰绽至强  
写过C++的朋友都知道,有时候程序编译通过,并不能代表程序就是对的,在linux下做开发时,经常会遇到跑崩溃的情况,但是在终端只会报Segmentation fault,如果工程代码量少,你还能重新debug一下慢慢找,本文给大家介绍了C++段错误的快速定位,需要的朋友可以参考下

问题背景

写过C++的朋友都知道,有时候程序编译通过,并不能代表程序就是对的。在linux下做开发时,经常会遇到跑崩溃的情况,但是在终端只会报Segmentation fault,这种情况大部分原因都是诸如访问越界,指针非法操作等等问题,如果工程代码量少,你还能重新debug一下慢慢找,但是对于大型工程,想短时间内找到是很难的。

问题解决

实际上,程序运行崩溃或中止时,会在当前目录下生成一种core文件,记录了异常时的运行状态等信息,通过gdb调用这个core文件就可以快速定位到错误。这里举例说明:

假如我写了个源程序如下:

// hello.cpp
#include <iostream>
#include <unistd.h>
int main()
{
    while(1) {
        char *p = new char();
        delete p;
        p = nullptr;
        *p = '2';
        sleep(1);
    }
    return 0;
}

指针p new完后又delete掉了,此时p已经为空,如果此时再执行*p = '2'; 就会出问题,但是编译器不知道,因为代码的类型检查都通过了。

# 编译通过
g++ -g hello.cpp -o hello
 
# 当前目录下有两个文件
ls
test.cpp test

我们通过./test执行程序,就会出现如下图的错误。

但是此时并不会生成core文件,需要通过命令开启core文件的生成:

ulimit -c 0 # -c后面的参数实际就是限制core文件的大小,设置为0表示不允许生成core
ulimit -c 100

然后重新执行./test,报错误后就会发现当前目录下多了core文件。此时使用gdb调试就可以复现定位问题了:

gdb -c core test

在这里就可以通过调用栈等信息快速定位问题。

到此这篇关于C++段错误(Segmentation fault)快速定位的解决方法的文章就介绍到这了,更多相关C++段错误快速定位内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言实现的双链表功能完整示例

    C语言实现的双链表功能完整示例

    这篇文章主要介绍了C语言实现的双链表功能,结合完整实例形式分析了基于C语言实现的双链表定义、添加、删除、排序等相关操作实现技巧,需要的朋友可以参考下
    2018-04-04
  • qt中 painter 的用法及原理示例详解

    qt中 painter 的用法及原理示例详解

    QPainter是Qt的一个绘图类,它的主要任务是在绘图设备上进行2D图形渲染,这篇文章主要介绍了qt中 painter 的用法以及原理,需要的朋友可以参考下
    2023-07-07
  • C++知识点之inline函数、回调函数和普通函数

    C++知识点之inline函数、回调函数和普通函数

    这篇文章主要给大家介绍了关于C++知识点之inline函数、回调函数和普通函数的相关使用方法,以及回调函数和普通函数的区别小结,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-07-07
  • C语言规律循环累加求和案例

    C语言规律循环累加求和案例

    这篇文章主要介绍了C语言规律循环累加求和案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • 使用C++设计开发一个功能完善的多进程管理器

    使用C++设计开发一个功能完善的多进程管理器

    一个健壮的多进程管理器不仅需要能够按照依赖顺序启动进程,还要能够优雅地停止进程,并在进程意外崩溃时自动重启,本文将详细介绍如何使用C++开发一个功能完善的多进程管理器,需要的可以了解下
    2025-10-10
  • C/C++举例讲解关键字的用法

    C/C++举例讲解关键字的用法

    相对于其他语言来说,C语言的关键字算是少的了。在C98中关键子总共只有32个,我们来分析一下部分关键字在C/C++中它独特的作用
    2022-05-05
  • 浅析C++字节对齐容易被忽略的两个问题

    浅析C++字节对齐容易被忽略的两个问题

    今天我就和大家分享一下C++字节对齐容易被忽略的两个问题。以下问题也是我实际开发工作中遇到的,如果有不同意见欢迎交流
    2013-07-07
  • 浅析在C/C++中如何写调试宏

    浅析在C/C++中如何写调试宏

    这篇文章主要为大家详细介绍了在C/C++中如何写调试宏的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下
    2024-05-05
  • C++ 迭代器失效问题解决

    C++ 迭代器失效问题解决

    在C++中,当一个vector进行了插入或删除操作时,其迭代器可能会失效,本文就来介绍一下C++ 迭代器失效问题解决,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • c语言生成随机数的方法(获得一组不同的随机数)

    c语言生成随机数的方法(获得一组不同的随机数)

    c语言生成一组不同的随机数,大家参考使用吧
    2013-12-12

最新评论