segment fault排查技巧

当遇到Segment Fault错误时,可以借助gdb和core dump进行定位。设置core dump大小不受限,确保编译时包含-g选项,并调整corefile路径及命名格式。backtrace函数用于获取调用栈信息,但需注意优化级别和内联函数的影响。在信号处理函数中进行backtrace时,建议单独进程处理日志以保证准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

core dump

定位segment fault错误思路:一般是使用gdb进行问题定位,gdb需要有core-dump文件。
方法:
设置core-dump文件大小,默认是0,ulimit -c unlimited,设置corefile的大小为不限制大小;
编译可执行程序时,需要加上-g选项,便于后期问题定位;
修改corefile的输出路径,新建一个/corefile文件夹,然后输入chmod 777开设权限;
通过echo “/corefile/core-%e-%p-%t” > /proc/sys/kernel/core_pattern,来修改输出文件名格式即可;
如果程序在运行过程中奔溃,则在/corefile目录下会自动生成对应的core-dump文件;
在这里插入图片描述

backtrace

#include <execinfo.h>

int backtrace(void **buffer, int size);

char **backtrace_symbols(void *const *buffer, int size);

void backtrace_symbols_fd(void *const *buffer, int size, int fd);

使用的时候有几点需要注意的地方:

  1. backtrace的实现依赖于栈指针(fp寄存器),在gcc编译过程中任何非零的优化等级(-On参数)或加入了栈指针优化参数-fomit-frame-pointer后都将有可能不能正确得到程序栈信息;
    2.backtrace_symbols的实现需要符号表的支持,在gcc编译过程中需要加入-rdynamic参数(不过增加改参数可能在某些机器人导致addr2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值