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;
}

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 计算机代码1e1代表什么意思,热水器上显示E1是什么意思

    计算机代码1e1代表什么意思,热水器上显示E1是什么意思再好的产品也有可能会出现故障,如果家里的壁挂炉出现故障了,显示了一些字母代码,你知道这些字母代码是什么意思吗?又该采取什么措施去解决呢?下面小编总结了一些品牌壁挂炉的故障代码,供大家参考。威能壁挂炉威能燃气壁挂炉运行时吐过发生故障,显示屏上会出现一个故障代码,多个代码交替出现,则说明是同时发生了多个故障。威能壁挂炉故障代码含义解析:F.0含义:供水温度传感器(NTC)故障原因:NTC故障,…

  • iphone手机获取不了软件_手机uuid什么意思

    iphone手机获取不了软件_手机uuid什么意思UDID是一种iOS设备的特殊识别码。除序号之外,每台iOS装置都另有一组独一无二的号码,我们就称之为识别码(UniqueDeviceIdentifier,UDID)。每个iOS开发者在缴交99美元年费的同时,都会得到100个betatest名额,可以让软件开发者输入100台iOS装置的UDID。有意成为betatester的人,只需向开发者提交UDID,经过输入及制成一个描述

  • js 删除对象里的某个属性[通俗易懂]

    删除属性有很多方法,学到了就在这里记录一下。有一个对象a。有2个属性b=1,c=2删除b,保留c1.使用deleteleta={b:1,c:2}deletea.b//trueconsole.log(a)//{c:2}2.使用解构leta={b:1,c:2}let{b,…a}=aconsole.log(a)//{c:2}…

  • Swift-Lesson2(下)

    Swift-Lesson2(下)

    2021年11月29日
  • Hadoop与 Spark中的Shuffle之区别与联系

    Hadoop与 Spark中的Shuffle之区别与联系Hadoop与 Spark中的Shuffle之区别与联系

  • GIMP 2.10教程「建议收藏」

    GIMP 2.10教程「建议收藏」更新一下(2020-12-27),有大神刚完成人工翻译,质量很好,地址在此:https://www.ycproject.cn/gimp/gimp.html下文可以忽略了GIMP_2.10中文教程(谷歌机翻)GIMP是全平台(桌面)下的Photoshop,专门处理图片的。先放原文地址:https://docs.gimp.org/2.10/zh_CN/(基于2.10.18版)GIMP中文教程太少了,搜了一大圈找到一个靠谱点全一点的,是@笨⼩璀在2014年基于2012年的2.8版翻译的,翻译

发表回复

您的电子邮箱地址不会被公开。

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