转自:http://www.itwendao.com/article/detail/404132.html

  • Linux应用程序运行出现错误,有时候并不会马上就体现出来。-_-可能是由于错误的条件还没触发把。
  • 但是发生的错误应该在哪里查找呢?—这时候,我们的Core Dump就派上用场了。

一、Core Dump——核心转存

    1. 定义

      • Core Dump又叫核心转存。当程序在运行过程中发生异常, 这时Linux系统可以把程序出错时的内存内容存储在一个core文件中, 这种过程叫Core Dump。
    2. 产生的原因
      • Linux应用程序在运行过程中,经常会遇到Segment fault(段错误) 这样的错误。产生这样错误的原因通常有:
        1. 数组访问越界
        2. 访问空指针
        3. 栈溢出
        4. 修改只读内存
    3. 开启和关闭
      1. 打开:ulimit -c ulimited
      2. 关闭:ulimit -c 0
      3. 查看:ulimit -c
    4. 分析命令
      用法 gdb 程序名 core文件名
      功能 发生core dump之后, 可以使用gdb进行查看core文件的内容, 以定位程序出错的位置
      gdb ./test core.12345
    5. 示例
      功能 这个程序在函数中访问了空指针导致异常的发生,查看core dump文件的具体过程
      步骤

      1、开启core dump功能;(ulimit -c ulimited)

      2、编写程序test.c文件,生成可执行文件test;(gcc -g test.c -o test)

      3、查看core dump文件,找出错误;(gdb ./test core.12345)

  1. #include <stdio.h>
  2. int main( int argc , char **argv ) {
  3. char *p ;
  4. *p = 250 ;
  5. return 0 ;
  6. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

二、Linux程序地址分析

  • 程序构成

    在Linux应用程序中,函数代码中的变量、方法等都有其存储空间,下面就介绍下这几个存储空间:

    数据存放 内存布局

    当Linux应用程序在内存中运行的时候,以上组成部分在内存中又是如何布局的呢?

    代码段: 代码,全局常量(const)、字符串常量;

    1.从低地址到高地址分别为:代码段、数据段、BSS段、堆、栈;

    2.堆向高内存地址生长;

    3.栈向低内存地址生长;

    数据段: 全局变量(初始化以及未初始化的)、静态变量(全局的和局部的、初始化的以及未初始化的);
    BSS段(Block Started by Symbol,

    又名:未初始化数据段):

    这里其实是数据段中的一个子分区而已;
    堆(heap): 动态分配的区域;
    栈(stack): 局部变量(初始化以及未初始化的,但不包含静态变量)、局部只读变量(const);
    编写程序查看数据的内存地址分布:

    1、编写程序chen.c(代码如下);

    2、生成可执行程序chen(gcc -g chen.c -o chen);

    3、执行程序;

    4、开启另外一个终端,使用命令(ps aux)查看程序的执行pid123;

    5、cat /proc/pid123/maps/即可看到程序占用的内存地址;

    注意:

    1、每个程序的内存起始地址都是0x8048000;

    2、每个程序在内存中都占用同一块代码区和数据区;

1、Linux的执行程序格式都是elf的;可以使用命令readelf -S 可执行程序查看程序的地址分布情况;
2、命令file可以查看文件的格式;

  1. include <stdio.h>
  2. int main ( int argc , char **argv ) {
  3. int a ;
  4. scanf("please don't enter number :%d\n",&a) ;
  5. return 0 ;
  6. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

01-Coredump核心转存&&Linux程序地址分析【转】的更多相关文章

  1. linux应用程序地址布局,王明学learn

    linux应用程序地址布局 在学习Linux应用程序开发时,经常会遇到如下概念:代码段.数据段.BSS段(Block Started by Symbol,又名:未初始化数据段).堆(heap)和栈(s ...

  2. 如何实现在Windows上运行Linux程序,附示例代码

    微软在去年发布了Bash On Windows, 这项技术允许在Windows上运行Linux程序, 我相信已经有很多文章解释过Bash On Windows的原理, 而今天的这篇文章将会讲解如何自己 ...

  3. 编写出色的GNU/Linux程序

    http://advancedlinuxprogramming.com提供了本书电子版的免费下载. 1 与执行环境交互 关于参数 C语言程序的main()函数使用两个参数和执行环境交互--(int)a ...

  4. linux程序自启动和新建linux服务的方法

    1 linux创建自启动程序    自启动的两种方法,都经过自己测试.1.1 自启动程序方法1:    在etc/rc.local在里面加入/home/robin/code/autoruntest & ...

  5. 应用 Valgrind 发现 Linux 程序的内存问题(转)

    Valgrind 概述 体系结构 Valgrind 是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合.Valgrind由内核(core)以及基于内核的其他调试工具组成.内核类似于一个 ...

  6. Linux程序包管理rpm与yum

    Linux程序包管理 Linux中软件的安装主要有两种形式:一种是直接下载源代码包自行编译后安装,另一种直接获取rpm软件包进行安装. 程序的组成部分: 二进制程序:程序的主体文件,比如我们运行一个l ...

  7. [转载]应用 Valgrind 发现 Linux 程序的内存问题

    应用 Valgrind 发现 Linux 程序的内存问题 如何定位应用程序开发中的内存问题,一直是 inux 应用程序开发中的瓶颈所在.有一款非常优秀的 linux 下开源的内存问题检测工具:valg ...

  8. 操作系统-存储管理(5)IA-32/Linux的地址转换

    IA-32/Linux按字节编址:在保护模式下,IA-32采用段页式虚拟存储管理方式,存储地址采用逻辑地址.线性地址和物理地址来进行描述. 逻辑地址由48位组成,包含16位段选择符(高13位为段表项的 ...

  9. Linux程序包管理之yum及源代码安装

    第十六章.Linux程序包管理之yum及源代码安装 目录 yum介绍 yum配置文件 yum的repo配置文件中可用的变量 yum命令的使用 使用光盘作为本地yum仓库 如何创建yum仓库 编译安装的 ...

随机推荐

  1. 前端基础:HTTP 状态码详解

    HTTP 状态码详解 1xx(信息类):表示接收到请求并继续处理 100 客户端应当继续发送请求.这个临时响应是用来通知客户端他的部分请求已经被服务器接收,且仍未被拒绝.客户端应当继续发送请求的剩余部 ...

  2. PGM学习之一

    一 课程基本信息 本课程是由Prof.Daphne Koller主讲,同时得到了Prof. Kevin Murphy的支持,在coursera上公开传播.在本课程中,你将学习到PGM(Probabil ...

  3. 【刷题】洛谷 P3950 部落冲突

    题目背景 在一个叫做Travian的世界里,生活着各个大大小小的部落.其中最为强大的是罗马.高卢和日耳曼.他们之间为了争夺资源和土地,进行了无数次的战斗.期间诞生了众多家喻户晓的英雄人物,也留下了许多 ...

  4. [CF1110H]Modest Substrings

    description CodeForces 定义一个正整数\(x\)是合适的当且仅当\(l\le x\le r\),其中\(l,r\le 10^{800}\). 找到一个长度为\(n\)的数字串,使 ...

  5. 深踩 AndroidStudio 缓存的坑

    本文记录的是今天在群里提到的昨天所踩的一个坑,有关 AndroidStudio 缓存的. 先说一下背景. 我负责的一个项目,对一个图表库有外部依赖.这个图表库是我在维护的,由于新功能在开发中,所以我就 ...

  6. 【Cf #503 B】The hat(二分)

    为什么Cf上所有的交互题都是$binary \; Search$... 把序列分成前后两个相等的部分,每一个都可以看成一条斜率为正负$1$的折线.我们把他们放在一起,显然,当折线的交点的横坐标为整数时 ...

  7. 【spoj SUBST1】 New Distinct Substrings

    http://www.spoj.com/problems/SUBST1/ (题目链接) 题意 求字符串的不相同的子串个数 Solution 后缀数组论文题. 每个子串一定是某个后缀的前缀,那么原问题等 ...

  8. wazhu之agent manage

      代理生命周期 注册代理 一旦代理程序安装在要监控的计算机上,就必须向Wazuh管理器注册才能建立通信.这可以通过命令行,Authd或RESTful API完成. 注册代理将保留在管理器中,直到用户 ...

  9. linux内核分析 第五周读书笔记

    第18章 调试 内核调试的难度大于用户级 一.准备开始 开始之前需要的是: 一个行为可靠且定义明确的bug 一个隐匿bug的内核版本 相关内核代码的知识和运气 想要成功的调试,取决于能不能将这些bug ...

  10. 数据分析与展示---Pandas库数据特征分析

    说明:0轴axis=0和1轴axis=1 简介 一:数据的排序 二:数据的基本统计分析 三:数据的累积统计分析 四:数据的相关分析 一:数据的排序 a b c d a b c d 二:数据的基本统计分 ...