linux下如何产生core,调试core

摘自:http://blog.163.com/redhumor@126/blog/static/19554784201131791239753/

在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。

1.core文件的生成开关和大小限制
 1)使用ulimit -c命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。
 2)使用ulimit -c filesize命令,可以限制core文件的大小(filesize的单位为kbyte)。若ulimit -c unlimited,则表示core文件的大小不受限制。如果生成的信息超过此大小,将会被裁剪,最终生成一个不完整的core文件。在调试此core文件的时候,gdb会提示错误。

2.core文件的名称和生成路径
core文件生成路径:
输入可执行文件运行命令的同一路径下。
若系统生成的core文件不带其它任何扩展名称,则全部命名为core。新的core文件生成将覆盖原来的core文件。

1)/proc/sys/kernel/core_uses_pid可以控制core文件的文件名中是否添加pid作为扩展。文件内容为1,表示添加pid作为扩展名,生成的core文件格式为core.xxxx;为0则表示生成的core文件同一命名为core。
可通过以下命令修改此文件:
echo "1" > /proc/sys/kernel/core_uses_pid

2)proc/sys/kernel/core_pattern可以控制core文件保存位置和文件名格式。
可通过以下命令修改此文件:
echo "/corefile/core-%e-%p-%t" > core_pattern,可以将core文件统一生成到/corefile目录下,产生的文件名为core-命令名-pid-时间戳
以下是参数列表:
    %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 coredumping executable name into filename 添加命令名

3.core文件的查看
 core文件需要使用gdb来查看。
 gdb ./a.out
 core-file core.xxxx
 使用bt命令即可看到程序出错的地方。 
以下两种命令方式具有相同的效果,但是在有些环境下不生效,所以推荐使用上面的命令。 
1)gdb -core=core.xxxx
file ./a.out
bt 
2)gdb -c core.xxxx
file ./a.out
bt

4.开发板上使用core文件调试
如果开发板的操作系统也是linux,core调试方法依然适用。如果开发板上不支持gdb,可将开发板的环境(依赖库)、可执行文件和core文件拷贝到PC的linux下。
在PC上调试开发板上产生的core文件,需要使用交叉编译器自带的gdb,并且需要在gdb中指定solib-absolute-prefix和solib-search-path两个变量以保证gdb能够找到可执行程序的依赖库路径。有一种建立配置文件的方法,不需要每次启动gdb都配置以上变量,即:在待运行gdb的路径下建立.gdbinit。
配置文件内容:
set solib-absolute-prefix YOUR_CROSS_COMPILE_PATH
set solib-search-path YOUR_CROSS_COMPILE_PATH
set solib-search-path YOUR_DEVELOPER_TOOLS_LIB_PATH
handle SIG32 nostop noprint pass

注意:待调试的可执行文件,在编译的时候需要加-g,core文件才能正常显示出错信息!有时候core信息很大,超出了开发板的空间限制,生成的core信息会残缺不全而无法使用,可以通过挂载到PC的方式来规避这一点。

转载于:https://www.cnblogs.com/LiuYanYGZ/p/5797247.html

linux下如何产生core,调试core相关推荐

  1. coredump gdb 调试_Linux下如何使用gdb调试core文件

    1.core文件 当程序运行过程中出现Segmentation fault (core dumped)错误时,程序停止运行,并产生core文件.core文件是程序运行状态的内存映象.使用gdb调试co ...

  2. linux下c/c++程序调试拾遗

    linux下c/c++程序调试拾遗 以下为整理c++程序调试过程中经常用到的工具链 1. 调试利器GDB linux下c++程序的调试,绕不过去的第一个就是gdb无疑了: 1.1 启动gdb gdb ...

  3. linux常用调试,linux下gdb常用的调试命令

    用gdb调试程序时,常常很困惑一些命令的使用,要么是不知道这个命令,要么忘了命令的使用方法.接下来是小编为大家收集的linux下gdb常用的调试命令,希望能帮到大家. linux下gdb常用的调试命令 ...

  4. Linux下使用GDB进行调试

    Linux下使用GDB进行调试的常用命令记于此. $ sudo su # g++ -g test.cpp -o test -pthread # gdb test         <------- ...

  5. LINUX下GDB反汇编和调试

    Linux下的汇编与Windows汇编最大的不同就是第一个操作数是原操作数,第二个是目的操作数.而Windows下却是相反. 1. 基本操作指令 简单的操作数类型说明.一般有三种. (1)马上数操作数 ...

  6. Linux下的段错误调试方法

    转自http://wenku.baidu.com/view/7416d23710661ed9ad51f33f.html 执行socket文件时,出现段错误 (core dumped) 产生段错误就是访 ...

  7. linux下的ehci控制器调试

    1 调试方法 linux下的usb ehci控制器的调试方法: mount -t debugfs debugfs /sys/kernel/debug cat /sys/kernel/debug/usb ...

  8. Linux下C语言的调试--转

    调试是每个程序员都会面临的问题. 如何提高程序员的调试效率, 更好更快地定位程序中的问题从而加快程序开发的进度, 是大家共同面对的问题. 可能Windows用户顺口就会说出:用VC呗 :-) , 它提 ...

  9. linux下Qt编写串口调试助手,如何在linux下用QT写一个简单的串口调试助手

    如何在linux下用QT写一个简单的串口调试助手 QT5串口类 在QT5以前,编写串口一般使用的是qextserialport类,但在QT5之后有了QT自带的串口类SerialPort(串口基础类)和 ...

  10. jlink怎么调试linux程序_纯Linux下的 ARM裸机调试环境搭建(GDB + JLink)

    一直想摆脱windows环境,在纯linux下进行arm裸机开发,但是由于一直不知道JLink如何在linux下运行和配置,一直无法进行下去. 以前都是windows+AXD调试.包括本人用的FL24 ...

最新文章

  1. 使用XSLT制作HTML邮件模板并发送
  2. 【杂谈】关于数据和模型,初学者极容易忽视的两个问题!
  3. 在职场中,长得漂亮真的有用吗?
  4. html 元素的属性
  5. ES6-set集合应用
  6. vba monthview控件64位_VBA学习
  7. 【基于zxing的编解码实战】zxing项目源码解读(2.3.0版本,Android部分)
  8. 最新29刷网课平台系统源码+带教程
  9. IBM和DoE推出世界上最快的超级计算机
  10. 三相全桥整流电路_三相全波整流电路原理?
  11. 如何提高服务器硬盘读写速度,如何加速硬盘读写速度,如何完全控制ntfs 分区...
  12. 微信小程序休眠setTimeout
  13. C语言通过for循环控制计时,C语言中关于时间的函数
  14. 大众点评数据分析报告
  15. ipv6地址概述——配置ipv6
  16. 2.微处理器:8088功能结构图【BIU 和 EU】 + 8088【内部各寄存器】的解释
  17. 计算机右键无法新建excel,电脑右键新建没有excel表格
  18. 前端开发面试问题及答案
  19. 蓝桥ROS机器人之古月居ROS入门21讲
  20. 光缆竣工验收流程及注意事项

热门文章

  1. 在VS中创建多个项目
  2. 【Linux】一步一步学Linux——free命令(80)
  3. linux 4.0内核编译选项,linux 2.40.20-8 内核编译选项.doc
  4. centos7怎么重置mysql密码_centOS7.4 重置mysql 密码
  5. ucos 消息队列代码详解_用python实现 多进程队的列数据处理详解,零基础记得都收藏哦
  6. arcgis怎么用python重新排序,使用ArcGIS脚本工具将点数据进行排序并编号
  7. pythonssl双向认证_Python 上的 ssl 提示验证失败,有什么办法深究具体失败的原因么?...
  8. 缺失的第一个正数—leetcode41
  9. 轻松使用zstd来解压缩
  10. NFS搭建openfoam