暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

OpenWrt:Coredump测试

han码录 2019-07-22
2694

    Coredump是Linux下的一种调试非常方便的机制,当服务运行故障时,可以将运行状态、内存、CPU寄存器等信息进行快照留存,使用GDB能轻松知道出现问题时服务的状态情况。在OpenWrt上使用也挺简单


busybox编译配置

base system->busybox->configuration->init utiltiles


kernel配置

general setup -> configure standard kernel feature


打开GDB

Utilities

这样既可编译出支持coredump以及包含gdb的固件,当固件起来后需要进行coredump的使能

root@OpenWrt:~# touch /.init_enable_core
root@OpenWrt:~# sysctl -w "kernel.core_pattern=/tmp/%e.%p.%s.%t.core"
kernel.core_pattern = /tmp/%e.%p.%s.%t.core
root@OpenWrt:~# ulimit -c unlimited

%e:进程可执行文件名

%p:进程PID

%s:信号号

%t:时间,从1970-01-01 零点零分零秒到当时的秒数


测试

测试程序对空指针赋值,一定产生内存访问错误


使用gdb进行调试

gdb  可执行文件  core文件

在进程编译时有-g选项的情况下可以直接打出对应的函数位置


思考

    通过上面的测试可以发现,coredump能够很方便的对运行时出问题的状态进行调试,不过,同时也存在一个问题,core文件会随着进程对内存使用的增大而增加,对于小存储空间的设备是个问题。

    上面才几条语句的测试程序产生的core文件已达200K,主要还是源自于对内存状态的保存。而对于程序调试来说,最关键信息是CPU关键寄存器以及栈的回溯情况,因此,对于小存储空间的设备可以考虑实现一个简单的core,如同内核的dump stack一样。

    要实现dump stack需要对当前所使用的体系结构有所了解,在无线路由固件里,mips体系架构较为主流,后面有机会的话进行mips下进程dump stack实现的分享

文章转载自han码录,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论