段错误核心转储

这篇具有很好参考价值的文章主要介绍了段错误核心转储。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在linux下运行可执行文件的时候出现了以下错误:

error:segmentation fault core dumped

解决方法:

#查看core文件大小判断是否可写
$ ulimit -a
real-time non-blocking time  (microseconds, -R) unlimited
core file size              (blocks, -c) unlimited
data seg size               (kbytes, -d) unlimited
scheduling priority                 (-e) 0
file size                   (blocks, -f) unlimited
pending signals                     (-i) 31265
max locked memory           (kbytes, -l) 1010876
max memory size             (kbytes, -m) unlimited
open files                          (-n) 1024
pipe size                (512 bytes, -p) 8
POSIX message queues         (bytes, -q) 819200
real-time priority                  (-r) 0
stack size                  (kbytes, -s) 8192
cpu time                   (seconds, -t) unlimited
max user processes                  (-u) 31265
virtual memory              (kbytes, -v) unlimited
file locks                          (-x) unlimited
#如果core file size是0就需要修改文件大小
$ ulimit -c unlimited
#查看是否修改成功
$ ulimit -c
unlimited
#通过man 5 core查看core文件路径
$ man 5 core
$ cat /proc/sys/kernel/core_pattern
|/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E
# 使用echo来修改文件路径发现权限不够
$ echo "/home/wm/projects/Webserver/bin/core-%e-%p-%t"> /proc/sys/kernel/core_pattern
bash: /proc/sys/kernel/core_pattern: Permission denied
# 使用命令关闭apport.service服务
$ sudo systemctl disable apport.service
# 查看core路径
$ cat /proc/sys/kernel/core_pattern
core
#再次运行发现生成core
$ ll
total 8880
drwxrwxr-x 2 wm wm     4096  817 09:50 ./
drwxrwxr-x 8 wm wm     4096  816 22:56 ../
-rw------- 1 wm wm 71880704  817 09:50 core.33594

然后gdb测试

#启动gdb
gdb 可执行文件 core

段错误核心转储,错误,linux
使用bt命令回溯详细错误:
段错误核心转储,错误,linux

段错误原因

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

(2)多线程程序使用了线程不安全的函数。
(3)多线程读写的数据未加锁保护。
对于会被多个线程同时访问的全局数据,应该注意加锁保护,否则很容易造成core dump
(4)非法指针
a) 使用空指针
b) 随意使用指针转换。一个指向一段内存的指针,除非确定这段内存原先就分配为某种结构或类型,或者这种结构或类型的数组,否则不要将它转换为这种结构或类型的指针,而应该将这段内存拷贝到一个这种结构或类型中,再访问这个结构或类型。这是因为如果这段内存的开始地址不是按照这种结构或类型对齐的,那么访问它时就很容易因为bus error而core dump.
(5)堆栈溢出。
不要使用大的局部变量(因为局部变量都分配在栈上),这样容易造成堆栈溢出,破坏系统的栈和堆结构,导致出现莫名其妙的错误。

原文链接:

段错误
段错误文章来源地址https://www.toymoban.com/news/detail-654843.html

到了这里,关于段错误核心转储的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【问题记录】Ubuntu 22.04 环境下,程序报:段错误(核心已转储)怎么使用 core 文件和GDB调试器 解决?

    目录 环境 问题情况 解决思路 原因分析 解决方法 番外知识 VMware® Workstation 16 Pro (版本:16.1.2 build-17966106) ubuntu-22.04.2-desktop-amd64 本人在运行百万并发的服务端程序时,程序运行报: 段错误(核心已转储) ,导致程序异常退出,如下 首先要确定核心转储文件的生成路径和

    2024年02月06日
    浏览(49)
  • 【探索Linux】—— 强大的命令行工具 P.16(进程信号 —— 信号产生 | 信号发送 | 核心转储)

    在现代社会中,信号无处不在。我们的生活充满了各种各样的信号,它们指引着我们前进的方向,使我们能够了解周围环境的变化。正如在计算机编程中一样,Linux进程信号也是一种重要的信号,它们扮演着相似的角色。 想象一下,在繁忙的城市街道上行驶,交通信号灯是我

    2024年02月05日
    浏览(54)
  • 【看表情包学Linux】进程等待 | wait/waitpid 的 status 参数 | 获取退出码与退出信号 | 初识核心转储

       🤣  爆笑 教程  👉 《看表情包学Linux》👈   猛戳订阅     🔥 💭 写在前面: 在上一章中我们讲解了进程创建与进程终止,本章我们开始讲解进程等待。进程等待这部分知识相较于前面还是较为复杂的,我会由浅入深地讲解这部分的知识点,值得一提的是在学习本章

    2024年02月02日
    浏览(41)
  • 非法指令 (核心已转储) 彻底解决方案

    之前在Nano上,经常运行程序的时候,遇到一个问题:非法指令 (核心已转储)。 在/usr/lib/python3/dist-packages/这个路径下,Nano自带了很多配置的包。在这里,numpy的版本是1.13.1(这个包现在已经直接pip安装不了了),但是后面我们自己pip安装的时候,(比如配置pytorch)安装了高版

    2024年02月15日
    浏览(39)
  • 学习系统编程No.25【核心转储实战】

    北京时间:2023/6/16/8:39,实训课中,大一下学期最后有课的一天,还有两天就要期末考啦!目前什么都还没有复习,不到星期天晚上,咱不慌,小小挂科,岂能拦得住我补考,哈哈哈!小事,莫慌,该篇博客出炉之时,就是我复习之日,临阵磨枪不快也光,这方面我是专业的

    2024年02月11日
    浏览(46)
  • 【已解决】terminate called after throwing an instance of ‘cv::Exception‘,已放弃 (核心已转储)

    这是运行高翔slambook2的代码出现的错误 terminate called after throwing an instance of ‘cv::Exception’ what(): OpenCV(3.4.15) /home/diyu/opencv-3.4.15/modules/imgproc/src/resize.cpp:4051: error: (-215:Assertion failed) !ssize.empty() in function ‘resize’ 已放弃 (核心已转储) 问题原因就在于代码中的文件路径找不到,所

    2024年02月09日
    浏览(60)
  • Windows核心编程(第五版)_1_错误处理_字符处理_内核对象

    ʕ •ᴥ•ʔ ɔ: 调用Windows函数时,它会先验证我们传给它的参数,然后再开始执行任务。如果传入的参数无效,或者由于其他原因导致操作无法执行,则函数的返回值将指出函数因为某些原因失败了。表1-1展示了大多数Windows函数使用的返回值的数据类型。 1.1 函数的错误码 通

    2024年02月08日
    浏览(41)
  • 快速上手Linux核心命令(一):核心命令简介

    Linux核心命令系列文章目录 快速上手Linux核心命令(一):核心命令简介 快速上手Linux核心命令(二):关机、重启 快速上手Linux核心命令(三):文件和目录操作命令 快速上手Linux核心命令(四):文件内容相关命令 快速上手Linux核心命令(五):文本处理三剑客 快速上手

    2023年04月22日
    浏览(45)
  • [OS/Linux] Linux核心参数:net.core.somaxconn(高并发场景核心参数)

    近期工作在搞压力测试,我负责开发维护的、基于 sring-cloud-gateway 的 大数据网关 微服务,其底层是基于 spring-webflux -- reactor-netty -- netty 。 在压测过程中(200并发--1000并发),发现大数据网关屡报 ConnectException: finishConnect(..) failed: Connection refused 错误。 关键行: io.netty.channe

    2024年02月04日
    浏览(36)
  • 创建转储期间出错失败蓝屏解决方法

    由于在创建转储期间出错创建转储文件失败导致蓝屏是一个非常常见的问题了,主要是驱动更新和第三方软件冲突导致的。下面小编就给大家带来详细的解决方法,一起来看看吧。 方法一: win+R后输入sysdm.cpl,到高级: 1、设置(启动和故障恢复),写入调试信息设置为小内

    2024年02月04日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包