sigaction检测段错误示例[通俗易懂]

sigaction检测段错误示例[通俗易懂]#include#include#include#include#include#include#include#defineARRAY_SIZE(a)sizeof(a)/sizeof(a[0])#defineDEBUG#ifdefDEBUG #defineLOG(fmt,args…)printf(“%s():%d”fmt,__FUNC

大家好,又见面了,我是你们的朋友全栈君。

#include <stdio.h>
#include <setjmp.h>
#include <signal.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <execinfo.h>

#define ARRAY_SIZE(a) sizeof(a)/sizeof(a[0])

#define DEBUG

#ifdef DEBUG
	#define LOG(fmt,args...) printf("%s():%d " fmt, __FUNCTION__, __LINE__, ##args)
#else
	#define LOG(fmt,args...) 
#endif


extern void dump_backtrace(void);

#include "common.h"

void dump_backtrace(void)
{
	int j, nptrs;
	void *buffer[32];
	char **strings;

	nptrs = backtrace(buffer,  ARRAY_SIZE(buffer) );
	printf("backtrace() returned %d addresses:\n", nptrs);

	strings = backtrace_symbols(buffer, nptrs);
	if (NULL == strings)
	{
	   perror("backtrace_symbols");
	   exit(-1);
	}

	for (j = 0; j < nptrs; j++)
	{
	   printf("    %s\n", strings[j]);
    }

	free(strings);
}

#include "common.h"


void test()
{
	*((int*)0x04)  = 0;
}

void siginfo_handler(int signum, siginfo_t * siginfo, void * context)
{
	LOG("Signal Number: %d\n", signum);	
	LOG("Address: %p\n", siginfo->si_addr);
	dump_backtrace();
	exit(-1);
}

int main()
{
	int ret = 0;
	struct sigaction act;
	act.sa_flags = SA_SIGINFO;
	act.sa_sigaction = siginfo_handler;
	
	sigemptyset(&act.sa_mask);
	ret = sigaction(SIGSEGV, &act, NULL);
	if(0 != ret)
	{
		perror("sigaction() failed");
	}

	test();
	return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141285.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CSS相对绝对定位 总结

    CSS相对绝对定位 总结相对定位 relative 绝对定位 absolute fixed 在文档流的 relative 未完全脱离文档流的 浮动脱离文档流的 absolute fixedfloat 究竟有没有脱离文档流 为什么文字会围绕在 float 元素周围 而块状元素依然会忽略 float 元素 只能说明 float 未完全脱离文档流 一 解释 1 position st

    2025年7月24日
    6
  • maven配置阿里云仓库[通俗易懂]

    maven配置阿里云仓库[通俗易懂]方式一:全局配置可以添加阿里云的镜像到maven的setting.xml配置中,这样就不需要每次在pom中,添加镜像仓库的配置,在mirrors节点下面添加子节点:<mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Ne…

    2022年4月20日
    847
  • ebpf简介_ebpf编程

    ebpf简介_ebpf编程@TOC[]什么是eBPFeBPF是什么呢?从它的全称“扩展的伯克利数据包过滤器(ExtendedBerkeleyPacketFilter)”来看,它是一种数据包过滤技术,是从BPF(BerkeleyPacketFilter)技术扩展而来的。顾名思义BPF来源于伯克利大学,最早应用于网络数据包过滤器,它比当时最先进的抓包技术快20倍,其主要得利于它的两个设计:内核态引入一个新的虚拟机,所有指令都在内核虚拟机中运行。用户态使用BPF字节码来定义过滤表达式,然后传递给内核

    2022年9月21日
    4
  • eXtremeDB XML[通俗易懂]

    eXtremeDB XML[通俗易懂]ForC/C++applicationstheeXtremeDBschemacompileroption“–x”causes mcocomptogenerateinterfacefunctionstoretrieve,createandreplace(update) thecontentsofanobjectwiththecontent

    2022年10月14日
    3
  • android 苹果 换机,苹果12怎么一键换机安卓?iPhone12一键换机功能操作步骤

    android 苹果 换机,苹果12怎么一键换机安卓?iPhone12一键换机功能操作步骤苹果12怎么从安卓一键换机?相信有很多朋友最近新购了iPhone12,但是原来安卓手机中有不少的联系人和文件资料,要是手动来备份还原,那就太麻烦了,所以这时候就需要用到一键换机功能了。下面我们就为大家带来了苹果12电脑端和手机端的一键换机教程,一起来看看吧!苹果12怎么一键换机安卓?iPhone12一键换机功能操作步骤苹果一键换机功能怎么操作1、使用QQ同步助手换机,我们可以在原来安卓或者旧苹果手…

    2022年5月26日
    118
  • Redis布隆过滤器原理与实践

    Redis布隆过滤器原理与实践背景在高并发请求时,业务数据一般会对数据进行缓存,提高系统并发量,因为磁盘IO和网络IO相对于内存IO的成百上千倍的性能劣势。做个简单计算,如果我们需要某个数据,该数据从数据库磁盘读出来需要0.1s,从交换机传过来需要0.05s,那么每个请求完成最少0.15s(当然,事实上磁盘和网络IO也没有这么慢,这里只是举例),该数据库服务器每秒只能响应67个请求;而如果该数据存在于本机内存里,读出来只需要10us,那么每秒钟能够响应100,000个请求。通过将高频使用的数据存在离cpu更近的位置,以减少数据传

    2022年10月7日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号