网站大量收购闲置独家精品文档,联系QQ:2885784924

死机出现coredump.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
在开发和使用Linux 程序时,引擎有时会莫名其妙的core 掉,在网上查了一下,整理了一个简单的调试core 文件的方法。 1、什么是core dump? Core,即core memory,而dump 就是堆放的意思。core dump 又叫核心转储,当程序运行过程中发生异常,程序异常退出时,由操作系统把程序当前的内存状况存储在一个core 文件中,叫core dump。 2、如何打开core dump支持? 有的操作系统并没有默认打开core dump 支持,需要用ulimit -c unlimited 语句进行设置, core 文件生成的位置一般在程序运行的当前目录下,文件名为core. 进程号( 当然不同的系统也许有所不同,可以查看相手册对路径和文件名进行设置). 3、Core dump的使用方法 首先应该在用gcc 进行编译时选择-g 选项,以便起动debug 支持,生成可执行文件是ex,./ ex 运行可执行文件,如果程序当掉,则会生成一个core 文件,假设为core.1568,则gdb ex core.1568 进入gdb,然后再用where 命令进行查看即可。 先看看我用的是个什么机器: # uname -a Linux localhost.localdomain 2.6.23.1-42.fc8 #1 SMP Tue Oct 30 13:55:12 EDT 2007 i686 i686 i386 GNU/Linux 再看看默认的一些参数:(注意core file size是个0,程序出错时不会产生core 文件了) $ ulimit -a 如果未设置 ulimit –c unlimited corefile size就是0,即使core dump,也无法生产core文件。开发板上的一般如下图: 写个简单的程序,看看core 文件是不是会被产生。 (代码略) $ gcc -Wall -g foo.c $ ./a.out Segmentation fault $ ls -l core.* ls: core.*: No such file or directory 没有找到core 文件,我们改改ulimit 的设置,让它产生。1024 是随便取的,要是core 文件大于1024 个块,就产生不出来了。需要设置ulimit –c unlimited .有时候,在开发板上运行的时候,文件系统的空间不足,core文件无法生成,可以考虑用nfs挂载或者u盘挂载,将core生成到pc的nfs目录或者u盘相应的工作目录。 $ ulimit -c 1024 $ ulimit -a core file size (blocks, -c) 1024 …… $ ./a.out Segmentation fault (core dumped) $ ls -l core.* -rw------- 1 uniware uniware 53248 Jun 30 17:10 core.9128 注意看上述的输出信息,多了个(coredumped)。确实产生了一个core 文件,9128 是 该进程的PID。我们用GDB 来看看这个core。 $ gdb --core=core.9128 (输出信息略) (gdb) bt #0 0in ?? () #1 0xbfffd8f8 in ?? () #2 0x0804839e in ?? () #3 0xb74cc6b3 in ?? () #4 0in ?? () 此时用bt 看不到backtrace,也就是调用堆栈, 原来GDB 还不知道符号信息在哪里。我们告诉 它一下: (gdb) file ./a.out (gdb) bt #0 0in sub () at foo.c:17 #1 0in main () at foo.c:8 此时backtrace 出来了。 注意:有时候,gdb 可执行文件名 corefile,也会出现类似#0 0in ?? () #1 0xbfffd8f8 in ?? ()的打印,这个时候,需要看一下可执行文件是否strip过,用file 可执行文件名即可,比如: [zc@localhost ysstb]$ file ysapp.exe ysapp.exe: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped。 如果还是出先上面的情况,试试address2line,通过addr2line可以找到地址对应的文件名和行号

文档评论(0)

xuefei111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档