linux gdb core 内存,通过gdb调试和core文件定位Segment fault问题

通过gdb调试和core文件定位Segment fault问题的主要工作有4步:前3步是准备工作,第4步是具体的调试,描述如下:

1. arm-linux-gdb调试工具安装

(1)去 路径下载最新的gdb工具,可将压缩包放到/usr/local/arm/路径下

(2)以gdb-7.9.tar.gz为例,编译安装arm-linux-gdb,需执行如下指令。

#tar -zxvf gdb-7.9.tar.gz

#cd gdb-7.9

#./configure -target=arm-linux -prefix=/usr/local/arm/arm-gdb-7.9

#make

#make install

configure的-target选项为arm-linux,生成makefile文件,目标是arm-linux-gdb;make完成编译,make install 进行安装。然后在/usr/local/arm/arm-gdb-7.9/bin目录,会看到编译生成的arm-linux-gdb工具。

2. 生成带有调试信息的可执行文件

gdb调试时,要求可执行程序里需包含必要调试信息(如包括扩展的符号表、行号、局部 或外部变量信息),这就需要确保两点:

(1)CC加-g或-ggdb选项编译

(2)屏蔽掉strip命令(如果makefile文件是从其他项目中移植的,可能会包含strip命令,用以删除调试信息)。

3. 生成core文件

(1)程序异常结束时,内核会自动将相关的寄存器、内存等信息转存到一个core文件中。为确保core文件的正常生成,需先放开内核对资源的限制。

#ulimit -c unlimited

然后kill掉原有进程,手动执行包含调试信息的可执行程序。如下(envcore为可执行程序名,可通过nfs的方式挂载到设备目录下):

./envcore &

当进程异常结束时,会在同一目录下生成core文件。core文件可能有上百兆,设备里可能无足够空间存储这么大的文件。所以可通过nfs的方式将虚拟机里的文件系统挂载到设备中,然后执行./envcore,这样生成的core文件,就会直接保存在虚拟机中。在设备的串口输入如下命令(其中10.1.11.111为虚拟机地址,/tmp/为设备的挂载点。

mount -t nfs -o nolock 10.1.11.111:/xxx/nfs /tmp/

4. 通过gdb调试和core文件定位问题

(1)如果arm-linux-gdb工具安装在虚拟机的/usr/local/arm/arm-gdb-7.9/bin目录下,需先将包含调试信息的可执行程序(如encore),以及core文件拷贝到同一目录下。然后执行如下命令:

#./arm-linux-gdb ./envcore ./core

#where

即可看到进程异常结束点对应的文件名、函数名、以及具体的代码行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值