Segmentation fault (core dumped)

core dump gdb调试 core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (linux中如果内存越界会收到SIGSEGV信号,然后就会core dump) 在程序运行的过程中,有的时候我们会遇到Segment fault(段错误)这样的错误。这种看起来比较困难,因为没有任何的栈、trace信息输出。该种类型的... 阅读详情
AI摘要

本文介绍了如何处理C语言中出现的`Segmentation fault (core dumped)`错误,分析了错误原因,包括数组越界和修改只读内存。通过使用`gcc -g`编译带有调试信息的程序,然后使用`gdb`进行调试,通过`where`命令定位错误行。当没有core文件生成时,可以调整`ulimit -c`设置。最后总结了内存访问越界可能导致core dump的情况,并强调了边界检测的重要性。


   这个的报错同样是因为没有及时记录所以只能重新找了个程序来演示,

               下面的程序,中红色部分:(scanf("%d",*parr) 中*parr本应该是 &(*p) 或是parr)

    #include <stdio.h>  
      
    #define ARRAY_SIZE 10  
      
    int main(void){  
      
        int arr[ARRAY_SIZE], *parr;  
      
        printf("Enter %d  number: ", ARRAY_SIZE);  
        for(parr=arr; parr<arr+ARRAY_SIZE; parr++){  
            <span style="color:#FF0000;">scanf("%d", *parr);</span>
        }  
      
        printf("The number will output in reversal order:\n");  
        for(parr=arr+ARRAY_SIZE-1; parr>=arr; parr--){  
            printf("%d\t",*parr);  
        }  
        printf("\n");  
      
        return 0;  
    }   

程序能顺利编译
(会出现警告,这里不是关注点), 但运行时会出现Segmentation fault (core dumped)



Segmentation fault (core dumped)一般是对内存操作不当造成的,常见的有:

(1)数组超出范围。

(2)修改了只读内存。比较特殊的是给了一个以零开头的指针。

本例是第二种,下面看看如何调试


gcc -g test.c -o test 编译

gdb test调试,进去直接运行,输入数据得到如下结果:


有报错但是没有说明在哪一行。坑啊坑

使用where 命令来查看


于是还一种方法使用core file来进行定位错误


划线部分引自:http://blog.sina.com.cn/s/blog_4b9eab320100uivj.html

---------------------------------------------------  ----------------------------------------------------

什么是Core Dump?
      Core的意思是内存, Dump的意思是扔出来, 堆出来.
开发和使用Unix程序时, 有时程序莫名其妙的down了, 却没有任何的提示(有时候会提示core dumped).这时候可以查看一下有没有形如core.进程号的文件生成, 这个文件便是操作系统把程序down掉时的内存内容扔出来生成的,它可以做为调试程序的参考.
core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时,由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump.

如何使用core文件?
gdb -c core文件路径 [应用程序的路径]
进去后输入where回车, 就可以显示程序在哪一行down掉的, 在哪个函数中.

为什么没有core文件生成呢?
有时候程序down了, 但是core文件却没有生成. core文件的生成跟你当前系统的环境设置有关系, 可以用下面的语句设置一下,然后再运行程序便成生成core文件.(这是在shell中执行的)
ulimit -c unlimited
【没有找到core文件,我们改改ulimit的设置,让它产生。1024是随便取的,要是core文件大于1024个块,就产生不出来了。)
$ ulimit -c 1024 (转者注:使用-c unlimited不限制core文件大小】

补充:

$ulimit -c 查看设置core大小设置 (下面是我的查看和设置,默认为0)



core文件生成的位置一般于运行程序的路径相同, 文件名一般为core.进程号

4. 用gdb查看core文件:
下面我们可以在发生运行时信号引起的错误时发生core dump了.
发生core dump之后, 用gdb进行查看core文件的内容, 以定位文件中引发core dump的行.
gdb [exec file] [core file]
如:
gdb ./test test.core
在进入gdb后, 用bt命令查看backtrace以检查发生程序运行到哪里, 来定位coredump的文件->行.

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------



core file是在尝试执行程序时才生成的。

gdb test core            信息如下



还是没有给出到底在哪一行出的错。只是知道错误是出现在输入输出的问题上了_~!~~~~~!~~~

同样使用where 命令或是bt命令,将会得到同上面的结果


还没结束,

  如在上面的程序中加入如下程序

<span style="font-size:18px;">7         unsigned char *p=0x00;
8         *p=0x00;
</span>

这就是明显的对保护的内存地址操作的行为

gcc -g test.c -o test 重新编译

./test 运行 直接报错  Segmentation fault (core dumped)

gdb test 进入调试  r 命令 可看到

错误就在第八行,但是第二个错误的没有报出(因为程序已经停止了)

退出gdb 使用core file则,

gdb test core 有如下信息:


同样也得到了具体的错误位置



总结:

造成程序core dump的原因,这里根据我所知道的总结以下:

   内存访问越界

  a) 由于使用错误的下标,导致数组访问越界

  b)访问了不该访问的内存地址

  还有就是没有看出来纯粹使用gdb和加上core file的区别(希望懂得人能够指点,不胜感激)

今天遇到的两个报错都是关于内存操作失误的,提醒我应该加强函数参数等的边界检测


如何轻松搞定 Segmentation fault ,看这篇就够了! 我相信每个程序员年轻的时候,在运行某程序,当屏幕弹出“Segmentation fault”时,你会变得非常焦虑,因为你不知道代码哪里跑挂了,初级程序员常常使用printf函数在怀疑点一个个的加打印去定位问题出在哪里了。 如果你熟悉gdb,你可能会使用gdb去运行这个程序,然后异常后执行backtrace(简写bt)命令打印异常调用栈。 但是gdb并不是万能的,例如程序运行一段... 阅读详情

相关推荐

Segmentation Fault错误原因总结

一、 什么是“Segmentation fault in Linux”所谓的段错误就是指访问的内存超过了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据

喜欢恋着风 60万+

Segmentation fault (core dumped)错误常见原因总结

1 问题原因 Segmentation fault (core dumped)多为内存不当操作造成。空指针、野指针的读写操作,数组越界访问,破坏常量等。对每个指针声明后进行初始化为NULL是避免这个问题的好办法。排除此问题的最好办法则是调试。 更为详细的原因: (1)内存访问越界 a) 由于使用错误的下标,导致数组访问越界 b) 搜索字符串时,依靠字符串结束符来判断字符串是否结束,但是字符串没有正常的使用结束符 c) 使用strcpy, strcat, sprintf, strcmp, strcasecmp

longteng_guo的博客 10万+

linux系统下产生Segmentation fault 与 Segmentation fault (core dumped)!!!

在Linux系统下,当程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息,编译时需要加上 -g -Wall)。我们使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。如何生成core文件和大小限制当系统程序运行产生而不是显示这说明,并没有产生code文件,我们需要执行以下命令来生成code文件,并限制文件大小。使用ulimit -c命令查看core文件的生成开关,如果结果为0,则表示关闭了此功能,不会生成core文件。

m0_73537205的博客 1万+

Segmentation fault (core dumped)

在linux下变成有时会出现这样的情况,编译时没有error,但是执行时会出现Segmentation fault (core dumped) core dumped就是核心转储,进程异常终止,进程用户空间的数据就会被写到磁盘。但是linux下一般不会产生core文件 需要用到gdb调试工具: 1、首先使用ulimit -a查看你的core file size是否为0.如果不是的话就请跳到步...

try_again_later的博客 1万+

再谈Segmentation fault (core dumped)问题 -查找段错误原因

再谈Segmentation fault (core dumped)问题 -查找段错误原因    在前一篇文章“Segmentation fault (core dumped) ”有说了具体core dumped产生的原因, 下面主要来介绍下问题的解决与查找,在linux下一般都使用gdb进行调试,那今天我就以Ubuntu 14.04环境作为介绍, 来查找正在的core du

dongqinliuzi的专栏 9657

关于Segmentation fault (core dumped)几个简单问题

有的程序可以通过编译,但在运行时会出现Segment fault(段错误)。这通常都是指针错误引起的。但这不像编译错误一样会提示到文件一行,而是没有任何信息。一种办法是用gdb的step, 一步一步寻找。但要step一个上万行的代码让人难以想象。 我们还有更好的办法,这就是core file。 如果想让系统在信号中断造成的错误时产生core文件, 我们需要在shell中按如下设置: #

优快云明星博主,认证博客专家,视频、Matlab领域优质创作者。 1万+

python遇到Segmentation fault (core dumped)调试方法

python调试方法

lefend的博客 1万+

【正点原子I.MX6U-MINI移植篇】Ubuntu-base根文件系统移植构建过程详解(四)

能不能在ARM板上运行Ubuntu呢?答案肯定是可以的,Ubuntu是Linux系统的一种,可以简单的将Ubuntu理解为一个根文件系统,和我们用busybox、buildroot制作的根文件系统一样。因此移植Ubuntu也就是将Ubuntu根文件系统移植到我们的开发板上。

果果小师弟的博客 3768

linux段错误core dumped,Linux下Segmentation fault(core dumped)简单调试方法

**什么是Segmentation fault?**Segmentation fault就是段错误,一般指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址、访问了系统保护的内存地址、访问了只读的内存地址等等情况。什么是core dumped操作系统把程序当掉时的内存内容 dump 出来(现在通常是写在一个叫 core 的 file 里面),让 我们或是 debugger ...

weixin_42200829的博客 1832

K8S证书过期解决办法之替换证书

k8s证书过期解决方案之替换证书

q_hsolucky的博客 1万+

ARKit面部动画实战:如何用blend shape让数字人表情更自然(附中文对照表)

本文深入探讨了如何利用ARKit的blend shape技术驱动数字人面部动画,以实现更自然生动的表情。文章提供了详细的blend shape中文对照表,并分享了实战技巧,包括构建复合表情动画序列、处理不对称性与微表情,以及性能优化策略,旨在帮助开发者高效提升数字人的表情表现力。

weixin_29292535的博客 325

LLDB 调试 Segmentation fault (core dumped)

LLDB 调试 Segmentation fault (core dumped)

程永强 1003

vc mfc listctrl使用虚拟列表 虚拟列表用法

note 虚拟列表可有效加载大量数据 需要处理listctrl的 LVN_GETDISPINFO 消息 使用虚拟列表 不能 使用 insert的方法插入数据,而是告诉listctrl 当前要显示多少行 使用SetItemCount函数告诉listctrl当前显示多少行 使用虚拟列表需要自己维护数据源 使用 添加list ctrl 控件 将其Owner Data 属性 设置为 True 添加...

知其所以然 398

VScode报错:Segmentation fault (core dumped)的解决办法

@[TOC]VScode运行程序时报错Segmentation fault (core dumped) 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在

♢是龙猫啊 1万+

使用DDR4控制器实现多通道数据读写

这种高带宽对于大量的数据的应用非常重要。对于Controller/PHY Mode 的选择,我们使用Controller + PHY模式,Xilinx UltraScale/UltraScale+等高端FPGA通常包含硬核PHY,选择Controller + PHY模式可直接利用硬核,降低功耗和延迟,并且此模式的开发更易上手。在Basic页面下,首先勾选上AXI4 Interface选项,我们选用的内存接口速度为2133MHz的ddr4芯片,由于双沿触发,频率为1066MHz,那么周期应为938ps。

weixin_38828382的博客 1364

2021秋-北邮计算机导论期末考试(BUPT)

2021秋-北邮计算机导论期末考试(BUPT) 难度较低适合新手练习

weixin_73985779的博客 1498

segmentation fault (core dumped)

概述 Segmentation fault (core dumped)多为内存不当操作造成。空指针、野指针的读写操作,数组越界访问,破坏常量等。对每个指针声明后进行初始化为NULL是避免这个问题的好办法。排除此问题的最好办法则是调试。 由于使用错误的下标,导致数组访问越界 使用strcpy, strcat, sprintf, strcmp, strcasecmp等字符串操作函数,将目标字符串读/写爆。应该使用strncpy, strlcpy, strncat, strlcat, snprintf, str

性感的小君君 8396

App爬虫实战篇-以华为真机手机爬取集换社的app为例

在开始学习这篇文章之前,建议你先按照之前2篇文章(和),配置必要的环境,才可以继续完成本章节内容。

youbingchen的博客 780

Segmentation fault (core dumped):分割故障(核心转储)问题定位

在linux下变成有时会出现这样的情况,编译时没有error,但是执行时会出现Segmentation fault (core dumped)我们先必须需要 core dumped是什么?其实就是核心转储。进程异常终止,进程用户空间的数据就会被写到磁盘。但是linux下一般不会产生core文件我们应该怎样去解决呢?这里我们就需要用到gdb调试工具。1、首先使用ulimit -a查看你的core f...

dzhongjie的博客 3万+

Carla运行显示The following component(s) are required to run this program:DirectX Runtime |nvapi64.dll没有被

Carla运行显示The following component(s) are required to run this p 参考: 【1】EPIC 启动游戏提示The following component(s) are required to run this program:... - 『悬赏问答区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cnhttps://www.52pojie.cn/thread-1485651-1-1.html ...

anananajiushiwo的博客 5万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

pytorch Segmentation fault (core dumped)

pytorch Segmentation fault (core dumped) 今天训练的时候出现了这个错误,解决方法: 调小batch_size

qq_40246742的博客 832

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【Ubuntu安装VMware tools】Segmentation fault (core dumped)

Ubuntu安装VMware tools时Segmentation fault (core dumped)问题的解决 以下是错误报告(节选): INPUT: [no] default Initializing... Segmentation fault (core dumped) Making sure services for VMware Tools are stopped. Stopping VMware Tools services in the virtual machine:

m0_50695988的博客 2万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

CUDA编程:Segmentation fault (core dumped)

在进行CUDAGPU编程的时候,出现了Segmentation fault (core dumped) 可以根据以下的不走一次查出错误的位置 1可以看一下,此时的内存是如何了 free -m 2 如果内存很多,就要释放内存 echo 3>/proc/sys/vm/drop_caches 3设置系统限制 看一下系统的限制 ulimit -a 解除控制 1 ulimit -c unl...

yychentracy的博客 6769

mysql core dumped_关于Segmentation fault (core dumped)几个简单问题的整理

有的程序可以通过编译,但在运行时会出现Segment fault(段错误)。这通常都是指针错误引起的。但这不像编译错误一样会提示到文件一行,而是没有任何信息。一种办法是用gdb的step, 一步一步寻找。但要step一个上万行的代码让人难以想象。 我们还有更好的办法,这就是core file。如果想让系统在信号中断造成的错误时产生core文件, 我们需要在shell中按如下设置:#设置core大小...

weixin_35186171的博客 551
上一篇: gcc 多源文件的编译方法
下一篇: YUM 简单介绍
doodlesomething
博客等级 码龄13年 53粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值