coredump来调试崩溃进程

当遇到Linux系统中进程异常崩溃时,生成core文件是快速定位问题的有效方法。文章介绍了如何通过设置ulimit和使用`setrlimit`函数开启coredump,以及如何在进程启动时调用`enableCoreDump`函数以确保崩溃时生成core文件。同时,讲解了使用gdb进行调试的步骤,包括将core文件从板子上传到编译服务器,用交叉编译器的gdb打开程序并查看调用栈。最后提醒,若无法生成core文件或看不到调用栈,可能涉及内核配置或库文件stripped问题。
摘要由CSDN通过智能技术生成

在平常开发中,经常碰到进程异常崩溃退出的情况,这时候最便捷的方法就是生成core文件,然后通过gdb在查看程序崩溃时的调用栈,一般很快就能定位出问题。 linux系统中程序异常崩溃时默认是不会自动生成core文件的,这时候我们一般需要使用以下命令将core文件生成开关打开,然后再在终端手动拉起进程,当进程再次崩溃时就会生成core文件。

# 将coresize从默认的0改成无限制
ulimit -c unlimited
# 因为我们的rootfs是只读的,所以需要将core文件生成路径从默认的当前路径改为/var/core
echo /var/core >/proc/sys/kernel/core_pattern

但是ulimit命令是有作用范围的,事实上ulimit限制的是当前shell进程以及其派生的子进程,所以通过ulimit修改coresize只是针对在当前shell下启动的子进程,而不能影响其他shell下启动的进程。而pc进程是一个精灵进程,由它启动的进程都是属于其他shell了,所以通过pc进程启动的子进程是无法生成core文件的。


那么怎么才能让指定的进程崩溃时生成core文件呢?

带着这个疑问,我查看了busybox中的ash的源码,发现ash中实现的ulimit命令最终是通过调用setrlimit函数来实现对coresize参数的设置。增加一个enableCoreDump函数用于开启coredump的功能,对于想要生成core文件的程序,只需要在启动时调用enableCoreDump(1),即可在程序崩溃时生成core文件。

int enableCoreDump(int iFlag)
{
    int iRes = RLIMIT_CORE;
    struct rlimit stRlim;

    /* 允许生成core文件 *
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值