嵌入式core dump调试方法

原创 2015年11月20日 12:21:43

 一、为什么使用coredump

有的时候写的程序总会遇到各种异常或者bug导致退出中止,但是程序却没有打印出可供参考的log信息,这时候就可以利用code文件进行分析。一般情况下,code文件会记录程序运行的内存,寄存器,堆栈指针等信息,想要使用code文件分析,就需要在linux系统中设置一下。

二、嵌入式下coredump生成设置

1.一般linux系统下默认是不会生成core dump文件的(毕竟生成的文件还是蛮大的),通过ulimit –a (如下图所示)可以查看能生成的code文件的大小,一般是0。可以通过“ulimit –c 参数(blocks)”或者“ulimit –c unlimited”设置,建议用后者。

imageimage

2.设置core dump文件的输出位置,一般默认是当前目录,可以通过“echo “1” > /proc/sys/kernel/core_user_pid ”使core文件加上pid号,也可以用“echo ”core保存目录/core-%e-%p-%t“ > /proc/sys/kernel/core_pattern ” 设置。

以下是参数表:ps:用到的也就那么几个

%p – insert pid into filename 添加pid

%u – insert current uid into filename 添加当前uid

%g – insert current gid into filename 添加当前gid

%s – insert signal that caused the coredump into the filename 添加导致产生core的信号

%t – insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间

%h – insert hostname where the coredump happened into filename 添加主机名

%e – insert coreddumping executable name into filename 添加命令名

3.运行程序,等停止退出后将生成的core文件,通过挂载u盘或者网络的方式拷贝到pc机Linux系统下,并和生成的可执行程序放在一个目录下。

ps:重启有可能会将上面的设置清除,最好运行前查看一番。

三、pc机Linux下分析core文件

1.先确定自己用的嵌入式处理器架构是ARM或者MIPS,选择相应的调试工具,下面以MIPS为例。mips-linux-gdb [exec file] [core file]

2.进入gdb以后需要运行info sharedlibrary来查看是否已经将需要的库导入,否则有可能查找位置时显示的是“??”。

image image

3.导入所需要的库,通过set solib-absolute-prefix 或者set solib-search-path 设置符号文件的位置。solib-absolute-prefix设置的是被搜索文件路径的前缀,solib-search-path设置的是被搜索文件的路径,solib-search-path可以有多个路径,中间按用:隔开, solib-absolute-prefix的值只能有一个。但一般常用solib-search-path 。

首先通过find或者其他方法找到所需要的库,“(gdb)solib-search-path 库路径:库路径”

 image image

4.最后通过bt命令查找到位置,基本就能确定程序死在哪个文件哪个函数了。可以通过“(gdb)l *地址”(如:(gdb)l *0x76b693dc)查看那个位置的函数,不过还是建议用source insight查看方便。

5.最后补充一个查看库文件结构的命令

Linux下动态库查看方法:nm -D lib.so

Linux下静态库查看方法:ar -t lib.a

利用core 文件查找嵌入式程序中的溢出点

利用core 文件查找嵌入式程序中的溢出点
  • lile777
  • lile777
  • 2015年08月31日 16:52
  • 644

段错误调试神器 - Core Dump详解

搬运自:http://www.cnblogs.com/lidabo/p/5014710.html   一、前言: 有的程序可以通过编译, 但在运行时会出现Segment fault(段错误). ...

arm linux coredump功能

1. 要打开该功能,需要先配置内核 +CONFIG_EXPERIMENTAL=y +CONFIG_ELF_CORE=y 2. 打开ulimit功能 ulimit -c unlimi...
  • ee230
  • ee230
  • 2016年09月26日 10:20
  • 473

arm-linux-gdb 环境搭建及调试core文件

系统环境: host:ubuntu12.04 gcc:gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) target:hisi3520d开发...

『babyt』SD2C2008杂记之非技术部分之第三天

原帖链接:http://topic.csdn.net/u/20081210/23/C2A761E3-C528-44D0-A9A6-43EAB8C96F3B.html作者:babt(阿泰)  http:...

平常心谈软件设计模式(二)

小弟的平常心谈软件设计模式(一)中讲解了原型模式,有位大侠给我建议很好,说叫我要一个一个将设计模式具体的运用场景,小弟打算从(三)中开始摆出实际例子来说说设计模式到底怎么去用。我之所以在这一篇中还是不...

linux下生成core dump文件调试方法及设置

转自:http://andyniu.iteye.com/blog/1965571 core dump的概念: A core dump is the recorded state of the wo...
  • zzwdkxx
  • zzwdkxx
  • 2017年06月27日 13:23
  • 706

Linux下调试core dump 文件的方法

在开发和使用Linux 程序时,引擎有时会莫名 其妙的core 掉,在网上查了一下,整理了一个简 单的调试core 文件的方法。 1、什么是core dump? Core,即core memo...

嵌入式gdb调试core

  • 2011年09月12日 20:04
  • 913B
  • 下载

linux下生成core dump文件方法及设置

core dump的概念: A core dump is the recorded state of the working memory of a computer program at a s...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:嵌入式core dump调试方法
举报原因:
原因补充:

(最多只允许输入30个字)