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回车, 就可以显示程序在哪一行当掉的, 在哪个函数中.
################################################################################
设置方法二:
1.用户家目录下建立corefiles文件夹.
$ mkdir corefiles
2.修改/etc/init.d/apport文件,在do_start 函数中添加 echo "/home/ubuntu/corefiles/core-%e-%p-%t" > /proc/sys/kernel/core_pattern (注意替换为你的 corefiles 目录的路径),注释掉原来的 echo "|$AGENT %p %s %c %d %P" > /proc/sys/kernel/core_pattern;
do_start()
{
# Return
# if daemon has been started
# if daemon was already running
# if daemon could not be started [ -e /var/crash ] || mkdir -p /var/crash
chmod /var/crash # check for kernel crash dump, convert it to apport report
if [ -e /var/crash/vmcore ] || [ -n "`ls /var/crash | egrep ^[0-9]{12}$`" ];then
/usr/share/apport/kernel_crashdump || true
fi # check for incomplete suspend/resume or hibernate
if [ -e /var/lib/pm-utils/status ]; then
/usr/share/apport/apportcheckresume || true
rm -f /var/lib/pm-utils/status
rm -f /var/lib/pm-utils/resume-hang.log
fi
echo "/home/ubuntu/corefiles/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
#echo "|$AGENT %p %s %c %P" > /proc/sys/kernel/core_pattern
echo > /proc/sys/fs/suid_dumpable
}
3.添加用户系统变量.在.bashrc文件底部添加如下:
$ vim .bashrc ulimit -c unlimited
$ source .bashrc
当系统异常时就会在corefiles文件目录下生成core文件。
ubuntu下core file文件生成及调试的更多相关文章
- Ubuntu下如何修改文件或者文件夹的权限
Ubuntu下如何修改文件或者文件夹的权限------chmod的亲身测试 具体原理如下: Linux系统下如何修改文档及文件夹(含子文件夹)权限,我们来看一下. 一 介 ...
- dump文件生成与调试(VS2008)
总结一下dump文件生成和调试的方法: 1:用SetUnhandledExceptionFilter捕获未处理的异常,包含头文件<windows.h>.函数原型为: LPTOP_LEVEL ...
- Ubuntu下查看so文件的函数列表
Ubuntu下查看so文件的函数列表 可使用如下命令: 1.nm -D XXX.so 2.objdump -tT XXX.so nm libcyusb.so | grep "usb ...
- linux下core file size设置笔记
现象说明:突然发现一台测试机器的java程序莫名其妙地没了,但是没有core dump!这就需要打开服务器的core文件生成的功能了,(即core dump文件),方便程序调试.1)core文件简介c ...
- core dump文件分析和调试
core介绍 当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成"核心转储").我们可以认 ...
- ubuntu下安装rpm 文件
正想着如何把rpm package 安装到ubuntu上, 发现了这篇文章,转载一下 Ubuntu的软件包格式是deb,如果要安装rpm的包,则要先用alien把rpm转换成deb. sudo a ...
- Ubuntu下用cue文件对ape和wav文件自动分轨
很多音乐CD的镜像文件都带cue格式的分轨文件,在Ubuntu Linux下可以通过一些工具来实现自动分轨. 一.Ubuntu下需要安装的工具有flac,shntool,libav-tools $ s ...
- linux 平台core dump文件生成
1. 在终端中输入ulimit -c 如果结果为0,说明当程序崩溃时,系统并不能生成core dump. root@hbg:/# ulimit -c0root@hbg:/# 2.使用ulimit -c ...
- ubuntu 下修改host文件
原文地址:http://www.cnblogs.com/kingcat/archive/2012/02/23/2364509.html 有些时候,我们需要让某些域名指向本地,来实现调试,下面介绍下ub ...
随机推荐
- [NOIp2013提高组]积木大赛/[NOIp2018提高组]铺设道路
[NOIp2013提高组]积木大赛/[NOIp2018提高组]铺设道路 题目大意: 对于长度为\(n(n\le10^5)\)的非负数列\(A\),每次可以选取一个区间\(-1\).问将数列清零至少需要 ...
- [HNOI2018]寻宝游戏
Description: 给出\(n\)个长为\(m\)的01串,第0个为0,同时给出\(q\)个询问串,每次向其中添加\(n\)个\(\&\)或\(|\)符号,求使这些串按顺序运算得到询问串 ...
- BZOJ2872 : 优莱卡
$A$类数据:直接输出$B[l]$,$O(n+m)$.$B$类数据:ST表求区间最小值,$O(n\log n+m)$.$C$类数据:可持久线段树求区间$k$小值,$O((n+m)\log n)$.剩下 ...
- ubuntu 配置
这是安装语言包 sudo apt-get install language-pack-touch-zh-hans language-pack-touch-zh-hant 这是安装字体 sudo apt ...
- python网络编程(五)
udp广播 #coding=utf-8 import socket, sys dest = ('<broadcast>', 7788) # 创建udp套接字 s = socket.sock ...
- TFS2017新特性(一)
自 Team Foundation Server 2015 中引入了基于集成式 Web 的 Release Management 以来,我们在此版本中进行了几处功能增强. 克隆.导出和导入发布定义 我 ...
- 3. Spring 核心之 IOC(控制反转) & DI(依赖注入)
注:此文摘自 http://blog.csdn.net/it_man/article/details/4402245 IOC(DI):其实这个Spring架构核心的概念没有这么复杂,更不像有些书上描述 ...
- windows配置java运行环境
配置jdk环境 https://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html 配置tomcat环境 https://j ...
- Centos--vsftp的配置
第一次正式接触linux,折腾ftp好几遍,安装第三次终于好了 安装 yum -y vsftpd install vsftpd:very secure ftp daemon (dea ...
- Ajax实现局部数据交互的一个简单实例
想要实现的功能:利用Ajax技术通过点击一个<button>按钮,然后在指定的文本框中输出想要的值. 1.使用Jsp创建一个前端页面. <body> <div style ...