linux c: core dump

1. core dump文件系统设置 http://www.cnblogs.com/no7dw/archive/2013/02/18/2915819.html

编译时需要输入-g才会生成coredump文件:

gcc -g -o test test.c

core文件的生成开关和大小限制:

1)使用ulimit -c 命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。

2)使用ulimit -c filesize命令,可以限制core文件的大小

  ulimit -c unlimited不限制core文件大小

如何使用Core文件:
  在Linux下,使用:
  #gdb -c core.pid program_name
  就可以进入gdb模式。
  输入where,就可以指出是在哪一行被Down掉,哪个function内,由谁调用等等。
  (gdb) where
  或者输入 bt。
  (gdb) bt

  pstack 也可以查看coredump文件;

2. Coredump产生的原因和几种情况 http://blog.chinaunix.net/uid-20671208-id-4910096.html

一般进程产生coredump是因为进程收到了一个segmentfault的信号,这时候,进程就会coredump,这个信号为SIGSEGV,一般在程序中看到的是收到11号信号。其就是SIGSEGV信号。比如:

其产生的几种可能有:

2.1 内存访问越界

a) 数组下标访问越界,当然也包括STL中的容器下标访问越界。

b) 遍历字符串时,依靠字符串结束符来判断字符串是否结束,但是字符串没有正常的使用结束符。

c) 使用strcpy, strcat, sprintf, strcmp,strcasecmp等字符串操作函数,将目标字符串写越界。应该使用strncpy, strlcpy, strncat, strlcat, snprintf, strncmp, strncasecmp等函数防止读写越界。

2.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),网络上一个线程安全函数列表的文档。

2.3 多线程读写的变量数据未加锁保护。比如说,全局变量, 静态变量等。

对于会被多个线程同时访问的全局数据,应该注意加锁保护,否则很容易造成coredump

2.4 非法指针,包括空指针,不合法的指针转换,野指针,还有跨平台产品中的结构体字节对齐问题等。

2.5 堆栈溢出。尤其是嵌入式系统,堆栈比较小,很容易就溢出了。

2.6 顺便附带几种不会产生coredump的情况:

The core file will not be generated if

(a)    the process was set-user-ID and the current user is not the owner of the program file, or

(b)     the process was set-group-ID and the current user is not the group owner of the file,

(c)     the user does not have permission to write in the current working directory,

(d)     the file already exists and the user does not have permission to write to it, or

(e)     the file is too big (recall the RLIMIT_CORE limit in Section 7.11). The permissions of the core file (assuming that the file doesn‘t already exist) are usually user-read and user-write, although Mac OS X sets only user-read.

时间: 2024-10-10 23:56:13

linux c: core dump的相关文章

linux下core dump【总结】

1.前言 一直在从事linux下后台开发,经常与core文件打交道.还记得刚开始从事linux下开发时,程序突然崩溃了,也没有任何日志.我不知所措,同事叫我看看core,我却问什么是core,怎么看.同事鄙视的眼神,我依然在目.后来学会了从core文件中分析原因,通过gdb看出程序挂再哪里,分析前后的变量,找出问题的原因.当时就觉得很神奇,core文件是怎么产生的呢?难道系统会自动产生,可是我在自己的linux系统上面写个非法程序测试,并没有产生core问题?这又是怎么回事呢?今天在ngnix的

Linux上Core Dump文件的形成和分析

原文: http://baidutech.blog.51cto.com/4114344/904419 Core,又称之为Core Dump文件,是Unix/Linux操作系统的一种机制,对于线上服务而言,Core令人闻之色变,因为出Core的过程意味着服务暂时不能正常响应,需要恢复,并且随着吐Core进程的内存空间越大,此过程可能持续很长一段时间(例如当进程占用60G+以上内存时,完整Core文件需要15分钟才能完全写到磁盘上),这期间产生的流量损失,不可估量. 凡事皆有两面性,OS在出Core

linux中core dump开启使用教程【转】

转自:http://www.111cn.net/sys/linux/67291.htm 一.什么是coredump 我们经常听到大家说到程序core掉了,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满足一定条件下(这里为什么说需要满足一定的条件呢?下面会分析)会产生一个叫做core的文件. 通常情况下,core文件会包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,我们可以理解为是程序工作当前状态存储生

Linux 打开core dump功能

系统打开core dump功能 在终端中输入命令 ulimit -c ,输出的结果为 0,说明默认是关闭 core dump 的,即当程序异常终止时,也不会生成 core dump 文件: 使用命令 ulimit -c unlimited 来开启 core dump 功能,并且不限制 core dump 文件的大小: 如果需要限制文件的大小,将 unlimited 改成你想生成 core 文件最大的大小,注意单位为 blocks(KB): 以上命令只会对当前的终端环境有效,如果想需要永久生效,方

Core Dump总结

Core Dump总结 查看现在系统dump core的情况 ulimit -c 结果表示core文件的大小.如果显示0,则不会dump core,显示unlimited不限制core文件大小 打开dump core 只要指定core文件大小不是0,系统就会打开dump core的功能.通过命令在~/.bash_profic中添加 ~~~bash ulimit -S -c unlimited > /dev/null 2>&1 ~~~ 就可以指定dump core了. 指定core文件包

什么是core dump linux下用core和gdb查询出现"段错误"的地方

什么是core dump   linux下用core和gdb查询出现"段错误"的地方 http://blog.chinaunix.net/uid-26833883-id-3193279.html 有些时候我们在一段C代码的时候,由于对一个非法内存进行了操作,在程序运行的过程中,出现了"段错误". 呵呵,这种问题我想很多人会经常遇到.遇到这种问题是非常无语的,只是提示了"段错误",接着什么都没 有,如果我们一味的去看代码找太疼苦了,因为我们都相信自

How to: Enable/Generate/Debug Core Dump In Linux?

http://www.itsprite.com/how-to-enablegeneratedebug-core-dump-in-linux/ What is Core Dump? If the running programs were terminated abnormal or crashed, the memory status ot the program will be recored by OS and saved in a file, this file is called “Co

Linux core dump 分析及相关调试

core是core dump文件,是linux服务器的一种机制.core是个程序的严重问题,会致使程序直接挂掉,需要恢复. 需要注意的东西 在程序挂掉的过程中,会纪录程序的内存信息和cpu调用堆栈信息,当程序占用大量内存的时候,比如40G,那core文件可能会达到60G多,那写文件会持续数十分钟,这么长时间流量都会损失,并且写大文件对wio的占用特别大,严重影响本台服务器的其他服务,对于在线服务,会用很多超时,或者严重的是一段时间无法提供服务.所以,core文件监控,大小控制也很重要. 产生的原

Linux core dump file详解

Linux core dump file详解 http://www.cnblogs.com/langqi250/archive/2013/03/05/2944931.html