openwrt开发如何用dumpcore来查找段错误

本文介绍了Linux系统中的coredump文件的生成、大小设置、命名规则,以及如何通过gdb进行coredump文件的解析和程序崩溃原因的分析。
摘要由CSDN通过智能技术生成

core dump文件
core dump 又叫核心转储,是一个程序运行时的环境一个集合包,包含崩溃时的堆栈信息,是一个二进制文件,无法使用记事本打开,一般会在指定目录下生成一个core文件。core文件仅仅是一个内存映象,主要用来调试。
core dump文件的生成和大小限制
linux系统more默认关闭coredump文件的生成,因为需要占用一部分系统开销。
检查系统core dump功能是否开启,0为关闭

开启core dump功能
临时开启core dump功能,重启或者重新登录会失效。

ulimit -c unlimited

[root@vsftpd ~]# ulimit -c unlimited  #生成文件大小不受限制
[root@vsftpd ~]# ulimit -c
unlimited
[root@vsftpd ~]# ulimit -c 1024   #限制生成coredump文件大小为1024K
[root@vsftpd ~]# ulimit -c
1024

指定core dump文件的名称格式
默认情况下系统生成的core dump文件不带其他拓展名,全部命名为core。此时新生成文件会覆盖掉旧的core文件;
core dump文件的参数说明

%% 单个%字符
%p dump进程的进程ID
%u dump进程的用户ID
%g dump进程的组ID
%s 导致core dump的信号
%t core dump 的时间
%h 主机名
%e 程序文件名

通过配置文件来指定core的命名格式:/proc/sys/kernel/core_pattern

echo "/tmp/%e.%p.%s.%t.core">/proc/sys/kernel/core_pattern
cat  /proc/sys/kernel/core_pattern
/tmp/%e.%p.%s.%t.core

这样当段错误发生时会在/tmp目录下生成dump 文件。

如何使用gdb解析core dump文件

首先待调试的程序编译时必须带有-g -O0选项,让产生的程序带有调试信息。

在openwrt中,打开gdb编译开关,然后编译生成gdb的ipk包,把这个包传到板子中,然后用ipkg命令进行安装:

ipkg install gdb_7.8-2_ipq.ipk

当产生段错误时就可以用gdb来查看出错的地方了,假设调试程序为communicat_app,产生的dump文件为/tmp/communicate_app.1148.11.1712563909.core.用gdb执行如下指令:

gdb communicate_app /tmp/communicate_app.1148.11.1712563909.core
root@DCA-MX30:/usr/sbin# communicate_app -c cloud.changjincorp.com -p 80
Segmentation fault (core dumped)
root@DCA-MX30:/usr/sbin# ls -l /tmp/communicate_app.29620.11.1712568953.core 
-rw-------    1 root     root        593920 Apr  8 17:35 /tmp/communicate_app.29620.11.1712568953.core
root@DCA-MX30:/usr/sbin# gdb communicate_app /tmp/communicate_app.29620.11.17125
68953.core 
GNU gdb (GDB) 7.8
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "arm-openwrt-linux".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from communicate_app...done.
[New LWP 29620]

warning: Can't read pathname for load map: No error information.
Core was generated by `communicate_app -c cloud.changjincorp.com -p 80'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x54b17e9c in main (argc=5, argv=0x7ea44e14) at main.c:1440
1440    main.c: No such file or directory.
(gdb) bt
#0  0x54b17e9c in main (argc=5, argv=0x7ea44e14) at main.c:1440
(gdb) 

再用bt就可以看到具体的调用栈,很容易就分析出程序crash的原因了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值