段错误dump调试

1.在应用程序运行平台中,打开dump功能(如果没有ulimit):

busybox sh -c 'ulimit -a'

ulimit -c unlimited

 

2.将应用程序编译,开启调试信息:

在makefile的cflags中: -g

 

3.

当程序出现段错误时,会将dumped文件输出到你运行程序的目录下。比如说,你是在tmp下,运行程序,那么dumped文件就会在tmp目录下

调试示例:

我的dumped文件名是:iot_wrt.13460.11.1569210595.core

程序名是:iot_wrt

  1. 进入调试:

mipsel-openwrt-linux-gdb iot_wrt iot_wrt. iot_wrt.13460.11.1569210595.core

进入后:输入命令:bt,这是进入最终段错误的地方

由以上可知:

出现这个东西:

出现#3出现了??(),阻碍了我们查看这个信息是什么,这是因为库没有找到相关的库符号表导致,上面也提示了,有12库没有加载成功,可以通过命令set solib-search-path libpath

加载到,那么找到你库的防止路径:

2)加载库

命令:

Set solib-search-path /home/liuy/workplace/wang_dev/openwrt_mt7688/openwrt-sdk/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/lib:/home/liuy/workplace/wang_dev/openwrt_mt7688/iot_gw/src/daemons/wrt_app/wrt_lib/lib

再次进入:

bt应该就可以了,如果还是有??,那么库没有找成功,或者你这个应该程序的库对应不上

,查看调用关系:

是从3->2->1->0,所以是0这个对应的函数出现问题导致段错误的。

有些可以指明是哪一行,但是我这里没有,只是指明了是哪一个函数里面出现问题的,现在我们就能功能函数详细的看看,哪里出现问题了。

3)如果没法确定是哪个的话,还可以通过反汇编方式找到:

mipsel-openwrt-linux-objdump -d iot_wrt.13460.11.1569210595.core >iot_wrt.S

如下:

这个只能说是应用程序本身出现了问题,如果是库出现了,那么只能反汇编库看看了。根据地址找到汇编的代码出。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值