专栏首页架构说遇到 Segmentation fault 你想到了什么?

遇到 Segmentation fault 你想到了什么?

问: Segmentation fault 可以用程序被捕获吗?

答:不能防不胜防:
换个问题:谈谈你段错误理解, 
如果是回答 core,非法地址, 说明还是处于青铜阶段,这是定义, 根本不知道背后和如何解决你没有回答。被套路了
  • 你回答定义,根本没扩展
  • 隐藏问题:java,C++ 程序的异常和系统的异常有什么区别?背后原理一样吗?

很多book提到,但是我根本联想,关联不起来,当时一片空白。

问:How to catch segmentation fault in Linux?

答:自定义信号处理函数。2个信号不能捕获。

  • int sigaction(int sig, const struct sigaction *act, struct sigaction *oact);

总结

  • 程序异常原理是:程序同步控制,实际就是setjump longjump
  • 信号原理:软件中断,特指由操作系统发出给应用的异步提示机制
  • A signal is an asynchronous notification The SIGSEGV signal is sent to a process when it makes an invalid virtual memory reference, or segmentation fault

代码

#include <iostream>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;

void segfault_sigaction(int signal, siginfo_t *si, void *arg)
{
    printf("Caught segfault at address %p\n", si->si_addr);
    exit(0);
}
int main()
{
 struct sigaction sa;
 memset(&sa, 0, sizeof(struct sigaction));
 sigemptyset(&sa.sa_mask);
 sa.sa_sigaction = segfault_sigaction;
 sa.sa_flags   = SA_SIGINFO;

 //sigaction(SIGSEGV, &sa, NULL); //Segmentation fault
     sigaction(SIGSEGV, &sa, NULL); //Caught segfault at address (nil)
 try
 {
  int *x = 0;
  *x = 1234;
 }
 catch(...)
 {
  cout << "How to catch segmentation fault in Linux? no"; 
 }
 return 0;
}

塔山:

  • strace - trace system calls and signals
  • https://en.wikipedia.org/wiki/Segmentation_fault
  • 清华大学操作系统 wiki http://os.cs.tsinghua.edu.cn/oscourse/OS2019spring
  • https://blog.csdn.net/work_msh/article/details/8470277

每次问自己一下:

一、这个技术出现的背景、初衷和要达到什么样的目标或是要解决什么样的问题

二、这个技术的优势和劣势分别是什么

三、这个技术适用的场景。任何技术都有其适用的场景,离开了这个场景

四、技术的组成部分和关键点。

五、技术的底层原理和关键实现

六、已有的实现和它之间的对比

本文分享自微信公众号 - 架构说(JiaGouS),作者:王传义

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-06-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一个漂亮的C ++堆栈跟踪漂亮打印器-backward-cpp

    在进行C/C++相关开发时候,经常会遇到段错误,这个时候比较无语的一点就是Linux Shell终端下几乎不会输出太多有用的信息,大多数情况下打印信息如下:Se...

    ccf19881030
  • [Error] Segmentation fault

    zhwhong
  • c库函数getenv引起的core dumped

    songleo
  • Dev 日志 | Segmentation Fault 和 GCC Illegal Instruction 编译问题排查

    笔者最近在重新整理和编译 Nebula Graph 的第三方依赖,选出两个比较有意思的问题给大家分享一下。

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

    有的程序可以通过编译,但在运行时会出现Segment fault(段错误)。这通常都是指针错误引起的。但这不像编译错误一样会提示到文件一行,而是没有任何信息。一...

    孙杰
  • 来看一道"简单的"C语言面试题

    貌似很久没有更新文章了,前两天更新了一篇《想后台运行没想到导致磁盘满了》,里面涉及的内容比较广,可惜看的人不多。今天来看到小题,复习一下。

    编程珠玑
  • 《coredump问题原理探究》Linux x86版第二章coredump捕获的环境配置

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

    血狼debugeeker
  • 用Tensorflow让神经网络自动创造音乐

    本文禁止转载,禁止用于各类讲座及ppt中,违者必究   前几天看到一个有意思的分享,大意是讲如何用Tensorflow教神经网络自动创造音乐。听起来好好玩有木有...

    Charlotte77
  • DNS劫持?你遇到了么

    就算不是页面跳转,网页也有可能被插入额外广告,无论去哪个网站都会有一个烦不胜烦的小窗无法消除。

    CFIEC
  • 由于版本依赖造成的YUM段错误

    最近在服务器(Centos 5.3,64位)上使用YUM,总是提示 Segmentation Fault,无论执行什么命令都是如此,一时不得其解。

    大江小浪
  • 配置tensorflow GPU 版本填坑路

    导语 运气好按照教程一把过,运气不好遇到一堆抓狂的问题,记录下踩到的坑 如果是练习教程中的例子tensorflow cpu 版本够用了,要训练的话...

    MelonTeam
  • 从BAT到TAB,你看到了什么?

    孟永辉
  • GDB调试core文件样例(如何定位Segment fault)

    core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump....

    阳光岛主
  • 在ubuntu中进行core dump调试

    在Linux环境下执行程序的时候,有的时候会出现段错误(‘segment fault’),同时显示core dumped,就像下面这样:

    王云峰
  • 你到底想要什么样的umap/tsne图?

    随着生物学背景知识的增加,单细胞图谱的可视化直接用10X的Loup或者seurat的Dimplot函数直接绘制的umap/tsne图往往很难达到要求了,这就要求...

    生信技能树jimmy
  • 准备好迎接蛋白设计的时代了吗?--RoseTTAFold实操

    作为学术界的fast follow,RoseTTAfold以其占用的资源有限以及预测蛋白复合物而占据了一定的优势。

    FindKey
  • mysql client登录clickhouse报错: Segmentation fault分析及处理过程|#13

    我也换个MySQL 8.0.25试一下,一样的碰到:Segmentation fault (core dumped)

    wubx
  • MongoDB3.6.3版本增加分片副本集的小bug

    昨天的文章中分享了MongoDB给集群中新增分片的过程。之前的测试是在自己的环境上,用MongoDB4.0.4的版本做的测试,整个测试过程都没有问题。

    AsiaYe
  • Linux下Page Fault的处理流程

    上篇文章 系统调用mmap的内核实现分析 中提到,当我们向操作系统申请内存时,操作系统并不是直接分配给我们物理内存,而是只标记当前进程拥有该段内存,当真正使用这...

    KINGYT

扫码关注云+社区

领取腾讯云代金券