什么是 core dump ? 以及如何使用gdb对 core dumped 进行调试
什么是core dump?(down = 当)
core的意思是:内存,dump的意思是:扔出来、堆出来。
开发和使用linux程序时,有时程序莫名其妙的down掉了,却没有任何的提示(有时候会提示core dumped)。
这时候可以查看一下有没有形如:core 的文件生成,这个文件便是操作系统把程序down掉时的内存的内容扔出来生成的,它可以做为调试程序的参考。
core dump又叫核心转储,当程序运行过程中发生异常,程序异常退出时,由操作系统把程序当前的内存状况存储在一个core文件中,叫core dump。
为什么没有core文件生成呢?
有时候程序down掉了,但是core文件却没有生成。
首先,就是要知道错误发生的地方。而Linux系统可以产生core文件,配合gdb就可以解决这个问题。
core文件的生成跟你当前系统的环境设置有关系,可以用下面的语句设置一下, 然后再运行程序便成生成core文件了。
第一步:让系统在信号中断造成的错误时产生core文件:
ulimit -c unlimited // 设置core大小为无限
ulimit unlimited //设置文件大小为无限
第二步:编译原来的程序:
gcc -o xxx xxx.c -g
(-g选项的作用是在可执行文件中加入源码信息,比如可执行文件中第几条机器指令对应源代码的第几行,但并不是把整个源文件嵌入到可执行文件中,而是在调试时必须保证gdb能找到源文件。)
第三步:运行编译后的的程序:
./xxx(或者 xxx)
运行后,然后 ls 发现多出来了core文件。
core文件生成的位置一般与运行程序的路径相同,文件名一般为 core。
第四步:用gdb查看core文件:
若没有安装gdb,则需要先安装它,安装gdb参考网址:http://www.cnblogs.com/chenmingjun/p/8280889.html
安装完成后使用如下命令:
gdb xxx core
第五步:输入bt或者where,就会出现错误的位置,就可以显示程序在哪一行dowm掉的,在哪个函数中down掉的。如下图:
具体错误可以从#0到#6来找。
以上就是 core dumped调试的方法。
什么是 core dump ? 以及如何使用gdb对 core dumped 进行调试的更多相关文章
- Linux应用调试 :使用gdb和gdbserver进行远程调试
一.引言 在日常程序开发中不免遇到类似空指针操作导致程序崩溃的问题,所以需要一定的手段去定位bug,而断点调试是普遍使用的技巧,比如Windows中用VC++的debug模式进单步运行.断点调试等,而 ...
- 使用GDB 追踪依赖poco的so程序,core dump文件分析.
前言 在windows 下 系统核心态程序蓝屏,会产生dump文件. 用户级程序在设置后,程序崩溃也会产生dump文件.以方便开发者用windbg进行分析. so,linux 系统也有一套这样的东东- ...
- linux core dump 文件 gdb分析
core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (linux中如果内存越界会收到SIG ...
- core dump gdb调试
core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (linux中如果内存越界会收到SIG ...
- 用GDB调试程序的设置 Segmentation fault(Core Dump)调试
在写wifi库的时候碰见一个 Segmentation fault(Core Dump) 所以需要用GDB调试下. 在cmake的时候,修改CMakeLists.txt set(CMAKE_C_FLA ...
- 在Linux上利用core dump和GDB调试
段错误(segfault) "段错误"是程序试图操作不允许访问或试图访问的不允许内存的情况.可能导致段错误的原因主要有: 1.试图解引用空指针(你不允许访问内存地址0) 2.试图解 ...
- 在Linux上利用core dump和GDB调试segfault
时常会遇到段错误(segfault),调试非常费劲,除了单元测试和基本测试外,有些时候是在在线环境下,没有基本开发和测试工具,这就需要调试的技能.以前介绍过使用strace进行系统调试和追踪<l ...
- 進階gdb之core dump的除錯
core dump的除錯 Basic Perl等語言處理的可以說是User的資料, C可以說在那邊把資料在記憶體移來移去, 組語可說把資料在暫存器搬來搬去, 越低階的處理表示握有的資源越少 所以C處理 ...
- Unix 用gdb分析core dump文件
产生core文件条件 用ulimit -c 指定core文件大小来开启core文件的生成,如:ulimit -c unlimited 用gdb分析core文件的条件 可执行程序在编译时,需加入-g参数 ...
随机推荐
- Xamarin Android 中Acitvity如何传递数据
在xamarin android的开发中,activity传递数据非常常见,下面我也来记一下在android中activity之间传递数据的几种方式, Xamarin Android中Activity ...
- C#打印杨辉三角
重主要的方法在于: 1.初始化二维数组 2.边界赋值 3.中心值赋值 4.输出 <pre name="code" class="csharp"> c ...
- BZOJ 4553 Tjoi2016&Heoi2016 序列
Tjoi2016&Heoi2016序列 Description 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值 可能会变化,但同一个时刻最 ...
- Quartz.Net 使用
Quartz.NET 是一套很好的任务调度框架. 下面介绍如何使用: 在项目Nuget包管理器中搜索:quartz 安装后会添加如下dll: <packages> <package ...
- rpm 命令详解
参考:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/10/08/2203153.html rpm是由红帽公司开发的软件包管理方式,使用r ...
- Linux第七节随笔-中 /date / ln /
4.date link 作用:显示或设定系统的日期与时间 参数: -d<字符串> 显示字符串所指的日期与时间.字符串前后必须加上双引号. -s<字符串> 根据字符串来设置日期与 ...
- c#加密解密源码,md5、des、rsa
从网上找来的代码,顺手改改,用起来更方便. 配置文件 using System; using System.Collections.Generic; using System.Text; using ...
- 房上的猫:StringBuffer类
一.使用StringBuffer类 StringBuffer类位于java.lang包中,是String类的增强类 步骤: 1.声明StringBuffer对象并初始化 StringBuffer s ...
- Centos7上安装使用locate
centos7上默认没有locate命令,需先安装locate yum install mlocate 注意是mlocate,如果是yum install locate系统会提示没有安装包 安装完成后 ...
- zabbix 图形插件 Grafana的安装
看http://www.myexception.cn/software-testing/2008870.html 就好了.