获取Core时函数栈的方法

在Linux服务开发中,当遇到异常时,通过分析Core文件能有效定位问题。然而,大内存服务生成Core文件耗时且可能占用大量磁盘空间。本文介绍了另一种策略——注册段错误信号处理函数,利用backtrace获取函数栈调用情况。虽然无法直接显示行号,但可以结合地址转换命令找到问题代码行。
摘要由CSDN通过智能技术生成

在Linux服务开发过程中,经常会遇到各种问题,其中一种快速高效解决问题的策略就是:当服务处理异常时,操作系统自动产生Core文件,通过GDB调试工具分析Core文件,还原异常发生时服务的函数栈调用层次,继而快速的分析出导致异常发生的逻辑代码。Core文件,本质就是服务发生异常时的内存映像,如果服务占用的内存空间非常大,尤其是在64位操作系统下,例如占用20G的内存,写入磁盘Core文件的耗时会比较久,或者服务频繁异常导致写入数量非常大的Core文件,占用非常大的磁盘空间。以上两种情况显然不适合产生Core文件,所以这里介绍一种获取Core发生的函数栈调用情况的方法。


主要原理为:注册段错误的信号处理函数,在信号处理函数中,通过backtrace来获取当前服务的函数栈调用情况。


示例代码如下(test_core.c):

#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <execinfo.h>

void Dump()
{
        void    *DumpArray[25];
        int     Size &#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值