ubuntu下core file文件生成及调试

1.简介:
corefile 是Linux下程序崩溃时生成的文件,可以用来分析程序崩溃的原因,因为它内部包含了程序崩溃时的堆栈信息。

2.corefile的设置

默认情况下,程序崩溃是不会生成corefile的,因为被操作系统限制。可以通过命令: ulimit -c 来查看,如果值为0则表示被限制了,所以不能生成corefile文件.

如果要使用corefile文件分析程序和系统异常信息,可以通过如下命令打开,其中unlimited表示corefile文件的大小无限制.

$ ulimit -c unlimited

这种设置方式虽然简单,但它却只是跟shell相关的,也就是说,如果我们关闭了当前shell再打开一个,则刚才的设置就失效了,这是很不方便的,可以将ulimit -c unlimited 放入/etc/profile中,然后执行source /etc/profile即可立即生效。

如果想配置只针对某一用户有效,则修改此用户的~/.bashrc或者~/.bash_profile文件:

$ ulimit -c unlimited
$ source .bashrc 

3.设置Core Dump的核心转储文件目录和命名规则

默认corefile是生成在程序的执行目录下或者程序启动调用了chdir之后的目录,我们可以通过设置生成corefile的格式来控制它,让其生成在固定的目录下。

/proc/sys/kernel/core_uses_pid可以控制产生的core文件的文件名中是否添加pid作为扩展,如果添加则文件内容为1,否则为0
/proc/sys/kernel/core_pattern可以设置格式化的core文件保存位置或文件名,比如原来文件内容是core-%e

# echo "/home/saneri/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

将会控制所产生的core文件会存放到corefile目录下,产生的文件名为core-命令名-pid-时间戳

或者

$ sysctl -w kernel.core_pattern=/corefile/core-%e-%p-%t

如果想让每次启动都保存设置,则需要写入配置文件中.

# echo "kernel.core_pattern=/home/saneri/corefile/core-%e-%p-%t" >> /etc/sysctl.conf
# sysctl -p /etc/sysctl.conf
kernel.core_pattern = /home/saneri/corefile/core-%e-%p-%t

关于格式的的控制有如下几个参数:

%%:相当于%
%p:相当于<pid>
%u:相当于<uid>
%g:相当于<gid>
%s:相当于导致dump的信号的数字
%t:相当于dump的时间
%e:相当于执行文件的名称
%h:相当于hostname

4.测试是否能生成core文件

$ kill -s SIGSEGV $$

查看 corefile目录下是否生成了core文件

5.用gdb查看core文件

gdb -c core文件路径 [应用程序的路径]

进去后输入where回车, 就可以显示程序在哪一行当掉的, 在哪个函数中.

原文地址:https://www.cnblogs.com/saneri/p/10280227.html

时间: 2024-11-03 22:46:21

ubuntu下core file文件生成及调试的相关文章

Linux 使用core file文件快速定位程序崩溃代码行

问题描述 如果在 Linux下编写程序,有时运行程序的时候程序崩溃,比如说只有"Segmentation fault (core dumped) ",程序比较小的话,还可以一行一行查看,但是如果程序很庞大,一行行查询,效率非常低下.Linux下可以程序可以生成core file文件,借助gdb很快能定位到崩溃的代码行. 解决方案 测试程序,除零操作,程序会崩溃 /* test.c */ #include <stdio.h> #include <stdlib.h>

Ubuntu下如何修改文件或者文件夹的权限

Ubuntu下如何修改文件或者文件夹的权限------chmod的亲身测试 具体原理如下: Linux系统下如何修改文档及文件夹(含子文件夹)权限,我们来看一下.              一 介绍:     可以使用命令chmod来为文件或目录赋予权限.Linux/Unix 的档案存取权限分为三级 : 档案拥有者.群组.其他.利用 chmod 可以藉以控制档案如何被他人所存取二 详解1 此命令有两种使用方法,一种是chmod后加数字,后接文件名chmod abc file 其中a,b,c各为一

Ubuntu下U盘文件只读的解决办法

Ubuntu下U盘文件只读的解决办法 解决方法: 1. 在Ubuntu终端运行如下命令 tail -f /var/log/syslog 2. 插入有只读文件系统故障的U盘 3. 观察命令行输出 输出局部如下: Jul816:44:50 cslouis-pc kernel:[15595.155904] FAT:Filesystem error (dev sdb4) Jul816:44:50 cslouis-pc kernel:[15595.155905] fat_get_cluster: inva

ubuntu下安装rpm 文件

  正想着如何把rpm package 安装到ubuntu上, 发现了这篇文章,转载一下 Ubuntu的软件包格式是deb,如果要安装rpm的包,则要先用alien把rpm转换成deb. sudo apt-get install alien #alien默认没有安装,所以首先要安装它 sudo alien xxxx.rpm #将rpm转换位deb,完成后会生成一个同名的xxxx.deb sudo dpkg -i xxxx.deb #安装 注意,用alien转换的deb包并不能保证100%顺利安装

Linux core dump文件生成与使用

一.说明 在前一家公司经常测出一些缓冲区溢出导致进程挂掉的问题,开发经常要求在调试模式进行测试,生成core文件给他们定位问题. 当时的调试模式启动只是修改某些配置文件重新启动即可,所以在很长一段时间内并不知道到底要如何生成core文件及core文件如何使用. 二.配置允许生成core文件 临时配置使用ulimit命令进行操作即可: # 查看当前用户core文件配置情况 # 0表示允许core文件大小为0,亦即不允许生成 ulimit -c # 限制core文件大小 # 禁止生成core文件 u

ubuntu 下修改host文件

原文地址:http://www.cnblogs.com/kingcat/archive/2012/02/23/2364509.html 有些时候,我们需要让某些域名指向本地,来实现调试,下面介绍下ubuntu下修改host实现域名指向本地的方法.    Ubuntu系统的Hosts只需修改/etc/hosts文件,在目录中还有一个hosts.conf文件,刚开始还以为只需要修改这个就可以了,结果发现是需要修改hosts.修改完之后要重启网络. 打开host文件 vim gedit /etc/ho

在ubuntu下如何验证文件的MD5码 (转载)

转自:http://blog.csdn.net/david_xtd/article/details/7641682 在windows下可以使用专用的工具软件如WinMD5等来查看文件的MD5码, 在ubuntu下通过命令行来查一样很方便:md5sum file,就可以得到文件的MD5码了. 若要跟校验码文件比对,假设 file.iso 和校验码文件 file.iso.md5 是在相同目录下,执行 md5sum -c file.iso.md5

解决在Ubuntu下打开txt文件乱码的问题

在装双系统的情况下,由于windows默认编码为GBK,而Ubuntu编码为UTF-8,所以在Ubuntu下打开Winodws的txt文件时,可能出现乱码问题. 解决的方法如下: iconv -f GBK -t UTF-8 gbk.txt就可以在终端看到正常的文件了 也可以将转换的文件存储到另一个文件里iconv -f GBK -t UTF-8 gbk.txt >gbk2utf8.txt就可以把转换后的内容存入gbk2utf8.txt供以后查看

linux怎么实时查看目录下是否有文件生成

安装inotify-tools $ sudo apt install inotify-tools -y 创建数据和日志目录 $ sudo mkdir -p /tmp/inotifywait/log/ /tmp/inotifywait/data/ 创建日志文件 $ touch /tmp/inotifywait/log/data.log 假设在 /tmp/inotifywait/data/ 中不断生成(删除,移动)数据,/tmp/inotifywait/log/data.log 文件中记录日志 开启