core dump

什么是coredump?

通常情况下coredmp包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息等。可以理解为把程序工作的当前状态存储成一个文件。许多程序和操作系统出错时会自动生成一个core文件。

如何使用coredump?coredump可以用在很多场合,使用Linux,或者solaris的人可能都有过这种经历,系统在跑一些压力测试或者系统负载一大的话,系统就hang住了或者干脆system panic.这时唯一能帮助你分析和解决问题的就是coredump了。

现在很多应该程序出错时也会出现coredump.

分析coredump的工具现在大部分类unix操作系统都提供了分析core文件的工具,比如 GNU Binutils Binary File Descriptor library (BFD), GNU Debugger (gdb),mdb等coredump的文件格式类unix操作系统中使用efi格式保存coredump文件。在solairs下

bash-3.2# file *unix.3 ELF 32-bit LSB executable 80386 Version 1, statically linked, not stripped, no debugging information availableunix.4 ELF 32-bit LSB executable 80386 Version 1, statically linked, not stripped, no debugging information available

造成程序coredump的原因很多,这里根据以往的经验总结一下:1 内存访问越界  a) 由于使用错误的下标,导致数组访问越界  b) 搜索字符串时,依靠字符串结束符来判断字符串是否结束,但是字符串没有正常的使用结束符  c) 使用strcpy, strcat, sprintf, strcmp, strcasecmp等字符串操作函数,将目标字符串读/写爆。应该使用strncpy, strlcpy, strncat, strlcat, snprintf, strncmp, strncasecmp等函数防止读写越界。 2 多线程程序使用了线程不安全的函数。应该使用下面这些可重入的函数,尤其注意红色标示出来的函数,它们很容易被用错:asctime_r(3c) gethostbyname_r(3n) getservbyname_r(3n) ctermid_r(3s) gethostent_r(3n) getservbyport_r(3n) ctime_r(3c) getlogin_r(3c) getservent_r(3n) fgetgrent_r(3c) getnetbyaddr_r(3n) getspent_r(3c) fgetpwent_r(3c) getnetbyname_r(3n) getspnam_r(3c) fgetspent_r(3c) getnetent_r(3n) gmtime_r(3c) gamma_r(3m) getnetgrent_r(3n) lgamma_r(3m) getauclassent_r(3) getprotobyname_r(3n) localtime_r(3c) getauclassnam_r(3) etprotobynumber_r(3n) nis_sperror_r(3n) getauevent_r(3) getprotoent_r(3n) rand_r(3c) getauevnam_r(3) getpwent_r(3c) readdir_r(3c) getauevnum_r(3) getpwnam_r(3c) strtok_r(3c) getgrent_r(3c) getpwuid_r(3c) tmpnam_r(3s) getgrgid_r(3c) getrpcbyname_r(3n) ttyname_r(3c) getgrnam_r(3c) getrpcbynumber_r(3n) gethostbyaddr_r(3n) getrpcent_r(3n) 3 多线程读写的数据未加锁保护。对于会被多个线程同时访问的全局数据,应该注意加锁保护,否则很容易造成core dump 4 非法指针  a) 使用空指针  b) 随意使用指针转换。一个指向一段内存的指针,除非确定这段内存原先就分配为某种结构或类型,或者这种结构或类型的数组,否则不要将它转换为这种结构或类型 的指针,而应该将这段内存拷贝到一个这种结构或类型中,再访问这个结构或类型。这是因为如果这段内存的开始地址不是按照这种结构或类型对齐的,那么访问它 时就很容易因为bus error而core dump. 5 堆栈溢出不要使用大的局部变量(因为局部变量都分配在栈上),这样容易造成堆栈溢出,破坏系统的栈和堆结构,导致出现莫名其妙的错误。 coredump文件的生成方法以及使用方法:1.  运行命令,此时允许coredump文件产生: ulimit –c unlimited2.  执行程序:./test在异常退出时,会显示如下信息,注意括号里的内容Segmentation fault (core dumped)程序执行目录下将产生*core文件3.  用gdb分析:#gdb ./test test.core系统支持生成core并设置存储位置的方法:1> 在/etc/profile中加入以下一行,这将允许生成coredump文件

ulimit -c unlimited

ulimit -c 1024 #Kb

ulimit -c 0 #不产生core file

2> 在rc.local中加入以下一行,这将使程序崩溃时生成的coredump文件位于/tmp目录下:echo /tmp/core.%e.%p > /proc/sys/kernel/core_pattern  

说明:以下是参数列表:

    %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 添加命令名

/tmp/也可以是其它的目录位置。最佳位置应当满足以下需求:* 对所有用户可写* 空间容量足够大

* 掉电后文件不丢失

* 掉电后文件不丢失

一个小列子

/** description: 演示core dump使用,这里产生一个 senmengtation fault #ulimit -c unlimited* compile with: gcc -g -o test test.c*/#include<stdio.h>
int main(int argc, char *argv[])
{char *p = NULL;printf("test a error: %s\n",*p);return 0;
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/243700.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TFT显示屏驱动设计与验证

TFT显示屏驱动设计与验证 RGB 接口的 TFT 屏扫描方式和 VGA (Video Graphics Array)标准类似,也是使用行列扫描的方式。在介绍 TFT 屏扫描原理之前,先来介绍下 VGA 显示器的扫描原理。在 VGA 标准兴起的时候,常见的彩色显示器一般由 CRT(阴极射线管)构成,色彩是 由 RGB 三…

看日本雅-miyavi演唱会

九月底和女儿在星光现场音乐厅看了雅-miyavi的演唱会。雅-miyavi是目前日本最受欢迎的视觉系摇滚歌手之一。所谓视觉系是起源于欧美&#xff0c;后风行日本的注重视觉效果的演唱形式。对他们来说&#xff0c;歌唱的技术也许并不重要&#xff0c;重要的是服饰、化妆以及舞台照明…

我堕落了~~

发现自己原来这么差劲。。。。。

PIC32单片机harmony开发环境 - uart例程和代码分析

开发环境&#xff1a;mplab 3.45 harmony 1.09 xc32 1.42 源代码下载&#xff1a;http://download.csdn.net/detail/zn2857/9712707 源代码分析&#xff1a; void APP_Tasks ( void ) {/* Check the applications current state. */switch ( appData.state ){/* Applications …

0欧电阻的用途

0欧电阻的用途 1、在电路中没有任何功能&#xff0c;只是在PCB上为了调试方便或兼容设计等原因。 2、可以做跳线用&#xff0c;如果某段线路不用&#xff0c;直接不贴该电阻即可(不影响外观)。 3、在匹配电路参数不确定的时候&#xff0c;以0欧姆代替&#xff0c;实际调试的时…

呼伦贝尔印象

秋天&#xff0c;接近黄昏中的新巴尔虎草原。在我去往中俄边境小城满洲里的路上。 鄂温克旗著名的巴彦胡硕草原&#xff0c;蜿蜒的伊敏河。 夕阳里的喇嘛庙。 风车与火烧云。都是童年才见过的景色。 满洲里的“套娃”广场。夜色中的满洲里是我见过的最美的边境小城。

ISO C99中的一些扩展(草稿)

一、指定数组初始化 int arry[6] { [4] 29, [2] 15 }; //指定arry[4]29, arry[2]15 ,其他的为0 等价于 int arry[6] { 0, 0, 15, 0, 29, 0 }; 类似于注定结构体初始化 二、空结构体&#xff0c;C89标准的结构体不支持空结构体的。。 struct empty { }; 三、C一样…

PIC32单片机harmony开发环境 - i2c例程和代码分析

开发环境&#xff1a;mplab 3.45 harmony 1.09 xc32 1.42 源代码下载&#xff1a;http://download.csdn.net/detail/zn2857/9712710 http://download.csdn.net/detail/zn2857/9712712 源代码分析&#xff1a;

你有可能错过的东西:IIS7 ULR-Rewrite已经成为正式版本

微软已经基于“Go Live”许可发布了姗姗来迟的IIS 7 URL重写器模块。一般来说&#xff0c;这表示对于产品应用&#xff0c;他们认为这个产品的基础代码已经足够稳定&#xff0c;但在官方理解上它还没有完全成熟。\u0026#xD;\n从这个版本开始&#xff0c;URL编写器与核心模式和用…

SDRAM控制器设计

SDRAM控制器设计 SDRAM 器件引脚示意图和功能框图如下: SDRAM 器件有如下的特性 通常情况下, SDRAM 存储器工作在 3.3V 的电压下(需要注意的是 DDR DRAM工作电压是 2.5V、 DDR2SDRAM 工作电压是 1.8V),拥有一个同步接口, SDRAM 的所有信号都在时钟信号的上升沿被寄存。…

殷墟 太行山 红旗渠

前几天去河南安阳考察&#xff0c;去了商代的遗址——殷墟、林县的红旗渠&#xff0c;还有太行山。 殷墟里的龟背鱼池。  太行山的桃花谷。二龙戏珠。 太行山的瀑布是一绝。 红旗渠。 红旗渠边的喜鹊。

有的事情做得很没有意思,

没有意思。很没有意思。。。。。好吧&#xff0c;继续做事。。。

PIC32单片机harmony开发环境 - SPI例程和代码分析

开发环境&#xff1a;mplab 3.45 harmony 1.09 xc32 1.42 源代码下载&#xff1a;http://download.csdn.net/detail/zn2857/9712711 源代码分析&#xff1a;

MATLAB数据分析

MATLAB数据分析 %求解x^2 - 3x + 1 = 0 的根%方法一: % 求根 % p = [1,-3,1]; % x = roots(p);%绘制图像 % x = -5 : 0.1 : 5; % y1 = x.*x - 3*x + 1; % y2 = zeros(size(x)); % plot(x,y1,x,y2);%方法二 %求根 % f = @(x)x*x - 3*x + 1; % x1 = fzero(f,0.5) %fzero求莫个…

落叶•离愁•鲁九

11月1号上午&#xff0c;送走了广州的林世宾&#xff0c;忽然起风了&#xff0c;枯黄的树叶漫天飞舞&#xff0c;然后落在校园里的石灰路面上滚动摩擦&#xff0c;像是有人在悄悄抽泣。校园静了&#xff0c;教室空了&#xff0c;宿舍凉了&#xff0c;等待着给新来的人腾地方。照…

Misc string test

/** std::string深入详解* Visual Studio 2008Sp1, 使用Ctrl F5启动调试*/ #include <iostream> #include <string> #include <cstdio> #include <cstddef> #include <cstring> #include <cstdlib> //qsort #include <errno.h> …

tiny4412 SDK1312B LED驱动

查看原理图和4412芯片手册&#xff0c;相关寄存器如下&#xff1a; GPM4CON&#xff1a;0x1100 02E0 GPM4DAT&#xff1a;0x1100 02E4

鲁九的有趣照片之一

在火车上也不忘了杀人&#xff0c;各个都想当凶手&#xff0c;当不上的就无聊到假寐&#xff0c;或者睁一只眼闭一只眼&#xff0c;事不关己高高挂起样子。其实凶手只有两个&#xff0c;谁都可以是&#xff0c;谁都可以不是。 喝水也要整齐划一&#xff0c;步调一致。 述强老弟…

RGB 转 YUV 算法

RGB 转 YUV 算法 `timescale 1ns / 1ps /* RGB 转 YUV 算法 计算公式: Y = 0.183R + 0.614G + 0.062B + 16; CB = -0.101R - 0.338G + 0.439B + 128; CR = 0.439R - 0.399G - 0.040B + 128; 其中,时序在计算过程中完全没有用到 输入到输出有三个 clock 的时延。 第一级流水线…