linux 下dump的使用

                       Linuxdump的使用

   

1  Core文件的生成... 1

2  定位出错的地方... 2

 

 Linux下的dump文件一般称为core文件 ,可以用来记录程序崩溃前的线程callstack信息,内存信息等,可以作为排错的一种辅助手段。生存的core大小可以限制,保存的内容也可以灵活的选择,因此在MID上也可以使用。

由于linux的开发性,类似的调试技术比windows上的更为强大,灵活。

 1  Core文件的生成

输入 ulimit  –a

Mid上的输出信息

time(seconds)        unlimited

file(blocks)         unlimited

data(kbytes)         unlimited

stack(kbytes)        8192

coredump(blocks)     0

memory(kbytes)       unlimited

locked memory(kbytes) 32

process              1024

nofiles              1024

vmemory(kbytes)      unlimited

locks                unlimited

 

注意

coredump(blocks)     0

指定了core 文件的大小为0 block

现在修改这个限制,设置成1024block,如果超过这个值就不再写core文件

Ulimit  -c  1024   

现在用一个测试程序进行验证

[code ]

#include <stdio.h>

int just_a_test()

{

   int * p = NULL;              

   printf("%d /n",*p);

}

int main()

{

 just_a_test();

}

[/code]

scatchbox 中编译

 

Gcc –Wall  -g  hello.c

将生成的a.out 放入mid中,

加上可执行权限

Chmod +x a.out

执行 ,在同级目录下生成了一个core文件

 

2  定位出错的地方

core 文件考到编译主机上,在host 上分析该core文件

接下来一个很重要的步骤就是编译自己的gdb

gnu 上下载源码 ,共享中也有

//10.111.0.1/File Exchange Area/zhangwei/gdb/ gdb-7.2.tar.gz

 

解压后进入gdb目录

配置编译参数

Host 默认在x86上,target 则为arm

./configure --target=arm-linux --enable-shared --prefix=/home/shenghuai/3G-Works/3G-Encoder/src/ampleksy/gdb/gdb-7.2 --without-x --disable-gdbtk --disable-tui --without-included-regex --without-included-gettext

Make

Make install

将生成的arm-linux-gdb 加入到path路径中来

运行 arm-linux-gdb --core 指定core文件

 

 

 

 

henghuai@shenghuai-3G:~/3G-Works/3G-Encoder/src/amplesky/gdb$ arm-linux-gdb --core=core

GNU gdb (GDB) 7.2

Copyright (C) 2010 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 "--host=i686-pc-linux-gnu --target=arm-linux".

For bug reporting instructions, please see:

<http://www.gnu.org/software/gdb/bugs/>.

[New Thread 1491]

Core was generated by `./a.out'.

Program terminated with signal 11, Segmentation fault.

#0  0x000083a0 in ?? ()

 

接下来指定可执行文件(含调试信息)

(gdb) file ./a.out

Reading symbols from /scratchbox/users/shenghuai/home/shenghuai/marvell-sdk/pxalinux/3G-encoder/src/amplesky/gdb/a.out...done.

(gdb) bt

#0  0x000083a0 in just_a_test () at hello.c:7

#1  0x000083c4 in main () at hello.c:14

 

很清晰的列出了出错的callstack

 

### Linux coredump 使用教程 #### 生成 Core Dump 文件 为了确保能够成功生成核心转储文件(core dump),需要配置系统的几个参数: - **打开 core 文件的大小限制** 通过 `ulimit` 命令可以查看并修改当前 shell session 的资源限制情况。对于不限制 core 文件大小的情况,可执行命令 `ulimit -c unlimited` 来允许创建任意大小的核心转储文件[^2]。 - **设定 core 文件名模式** 可以通过调整 `/proc/sys/kernel/core_pattern` 文件的内容来自定义 core 文件的位置及其命名方式。例如,要将所有的 core 文件都存储到特定目录下,并按照一定格式命名,则可以用如下指令完成设置: ```bash sudo sh -c "echo '/data/coredump/core_$(date +%Y-%m-%d_%H-%M-%S)-%p.dump' > /proc/sys/kernel/core_pattern" ``` 这会使得每次发生崩溃时产生的 core 文件都会被放置于 `/data/coredump/` 路径之下,并带有日期时间戳以及进程 ID 等信息作为文件名称的一部分[^4]。 另外一种更常见的做法是指定固定的模板字符串给 kernel.core_pattern 参数,比如使用 `%e` 表示程序名、`%s` 表示信号编号等变量来构建更加灵活的名字结构,像这样: ```bash kernel.core_pattern="/coredumps/core-%e-%s-%u-%g-%p-%t" ``` 上述配置意味着每当应用程序异常终止时,操作系统将会依据此模板自动生成相应的 core 文件[^3]。 #### 分析 Core Dump 文件 一旦获得了所需的 core 文件之后,就可以利用调试工具对其进行深入探究了。最常用的手段之一便是借助 GDB (GNU Debugger),它不仅支持直接加载 core 文件来进行事后审查,还提供了丰富的功能帮助定位问题所在之处。 假设有一个名为 `<coredump>` 的 core 文件对应某个已知二进制文件的话,那么启动 GDB 并载入该 core 文件的方式如下所示: ```shell coredumpctl gdb <coredump> ``` 这条语句会让 GDB 连接到由 systemd-coredump 服务管理下的指定 core 文件上,从而让用户能够在交互式的环境中探索程序的状态,包括但不限于调用栈回溯、变量值检视等方面的信息[^1]。 此外,在某些情况下如果想要获取更为详细的崩溃现场数据,还可以考虑安装额外的支持包或是启用其他辅助特性,以便更好地理解故障原因。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值