linux打开core文件,[转载]linux下core文件设置与查看
程序异常推出时,内核会生成一个core文件(是内存映像以及调试信息)。可以通过使用gdb来查看core文件,指示出导致程序出错的代码所在的文件和行数。
1、查看系统中core文件生成的开关是否打开
1)使用ulimit -c命令可查看core文件的生成开关,若结果为0,则便是关闭了此功能,不会生成core文件。
2、设置core文件生成
1)使用命令ulimit -c filesize命令
若ulimit -c unlimited 则标识此core文件的大小不受限制
若指定filesize,如果生成的信息超过此大小,将会被裁剪,最终生成一个不完整的core文件,在调
试此core文件时,gdb会提示错误。
2)但是若想整个系统中生效则在shell里面设置是不行的,方法如下:
(1)编辑/root/.bash_profile文件,在其中加入ulitmit -S -c unlimited
(2)source /root/.bash_profile
3、core文件的设置
1)/proc/sys/kernel/core_uses_pid可以控制core文件的问价名是否添加PID作为扩展,文件的内容为1,
标识添加PID作为扩展,生成的core文件格式为core.XXXX;为0则表示生成的core文件统一命名为
core;可通过一下命令修改此文件:
echo "1" > /proc/sys/kernel/core_uses_pid
2)core文件的保存位置和文件名格式
echo "/corefile/core-%e-%p-%t" > core_pattern,可以将core文件统一生成到/corefile目录
下,产生的文件名为core-命令名-pid-时间戳
以下是参数列表:
%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 添加命令名
3.core文件的查看
core文件需要使用gdb来查看。
gdb ./a.out
core-file core.xxxx
使用bt命令即可看到程序出错的地方。
以下两种命令方式具有相同的效果,但是在有些环境下不生效,所以推荐使用上面的命令。
1)gdb -core=core.xxxx
file ./a.out
bt
2)gdb -c core.xxxx
file ./a.out
bt
也可以通过gdb 程序名 core文件名
如:gdb test core.8482
然后通过bt或者where查看程序崩溃时的堆栈信息
注意:在编译程序的时候要加入选项-g。
在linux环境下调试多线程,总觉得不像.NET那么方便。这几天就为找一个死锁的bug折腾好久,介绍一下用过的方法吧。
多线程如果dump,多为段错误,一般都涉及内存非法读写。可以这样处理,使用下面的命令打开系统开关,让其可以在死掉的时候生成core文件。
ulimit -c unlimited
这样的话死掉的时候就可以在当前目录看到core.pid(pid为进程号)的文件。接着使用gdb:
gdb ./bin ./core.pid
进去后,使用bt查看死掉时栈的情况,在使用frame命令。
还有就是里面某个线程停住,也没死,这种情况一般就是死锁或者涉及消息接受的超时问题(听人说的,没有遇到过)。遇到这种情况,可以使用:
gcore pid(调试进程的pid号)
手动生成core文件,在使用pstack(linux下好像不好使)查看堆栈的情况。如果都看不出来,就仔细查看代码,看看是不是在if,return,break,continue这种语句操作是忘记解锁,还有嵌套锁的问题,都需要分析清楚了。
最后,说一句,静心看代码,捶胸顿足是没有用的。
---------------------------------------------------------------
使用C/C++语言开发程序时,当程序crash的时候产生core dump文件对于调试程序是很有帮助的。在Redhat Linux系统中默认是不生成core dump文件的,这是因为在/etc/profile文件中有这样一行
ulimit -S -c 0 > /dev/null 2>&1
如何打开core dump呢?最简单的方法是用户在自己的~/.bash_profile中加入ulimit -S -c unlimited > /dev/null 2>&1,这样设置后允许当前用户生成没有大小限制的core dump文件。此外还有两种系统级修改生成core dump的方法。
第一种方法是修改/etc/profile,把ulimit那一行改为
ulimit -S -c unlimited > /dev/null 2>&1
这样设置后系统允许所有用户生成没有大小限制的core dump文件。这样做的优点是不需要重起系统,缺点是无法控制只让某些用户生成core dump文件。
第二种方法是修改/etc/security/limits.conf文件。很多系统上限都可以通过修改这个文件改变,如最大子进程个数,最大打开文件数等等。这个文件有详细的注释,对如何修改这个文件做了说明。如果想对所有用户打开core dump,可以加入一行
* soft core 0
如果只想对某些用户或用户组打开core dump,可以加入
user soft core 0或@group soft core 0
注意如果通过修改/etc/security/limits.conf文件打开core dump,还需要注释掉/etc/profile中的ulmit那一行
#ulimit -S -c 0 > /dev/null 2>&1
这样修改的优点是可以针对特定用户或特定组打开core dump文件,缺点是需要重起系统。
最后说一下生成core dump文件的位置,默认位置与可执行程序在同一目录下,文件名是core.***,其中***是一个数字。core dump文件名的模式保存在/proc/sys/kernel/core_pattern中,缺省值是core。通过以下命令可以更改core dump文件的位置(如希望生成到/tmp/cores目录下)
echo "/tmp/cores/core" > /proc/sys/kernel/core_pattern
linux打开core文件,[转载]linux下core文件设置与查看相关推荐
- Linux和Windows的遍历目录下所有文件的方法对比
首先两者读取所有文件的方法都是采用迭代的方式,首先用函数A的返回值判断目录下是否有文件,然后返回值合法则在循环中用函数B直到函数B的返回值不合法为止.最后用函数C释放资源. 1.打开目录 #inclu ...
- linux空间支持伪静态,[转载]Linux下nginx支持.htaccess文件实现伪静态的方法
方法如下: 1. 在需要使用.htaccess文件的目录下新建一个.htaccess文件, 如本人的一个Discuz论坛目录: vim /var/www/html/168pc/bbs/.htacces ...
- [Linux] Linux 客户端NFS挂载后目录下中文名文件乱码
0x0 场景 服务端:Windows 2008R2 NFS共享目录D:/TEST 客户端:Linux/Centos 7.5 Centos 7.5 客户端NFS挂载 Windows2008R2 共享目录 ...
- linux spool目录 删除,Linux知识:/var/spool/clientmqueue 下垃圾文件删除
Linux操作系统中的/var/spool/clientmqueue/目录下存在大量文件. 原因分析:系统中有用户开启了 cron,而cron中执行的程序有输出内容,输出内容会以邮件形式发给cron的 ...
- linux批量下载数据,[转载]linux shell批量下载IGS或CORS网FTP数据
最近用迅雷FTP探测器下载数据,下载好之后发现漏下了好多数据,所以使用linux wget命令来实现FTP数据批量下载 关于wget命令可以 用wget --help 查看帮助,简单说明一下: wge ...
- linux打开端口_在Linux上打开端口
linux打开端口 Before we learn about opening a port on Linux, let's understand what network ports are. A ...
- cmd如何打开某一盘符下的文件
方法一: 在Win+R运行框里输入com,就可以直接进入到控制台 就比如你进入D盘下 查看D盘下的目录输入dir可以查看D盘下的文件 打开D盘的某个文件即输入cd 文件夹名字即可 方法二: 进入我的电 ...
- linux打开word乱码,解决linux下openoffice word文件转PDF中文乱码的问题
网上很多介绍是由于jdk中的没有字体导致乱码,而我遇到的是转换过程并未报错,但转换后的PDF中是乱码,尝试在jre/lib/fonts/中增加字体,还是不能解决问题,因此可以判断非jre字体问题,是l ...
- 查看linux驱动使用的头文件,[转载]linux下usb驱动头文件的usb.h(二)
#define URB_NO_FSBR 0x0020 /* UHCI-specific */ #define URB_ZERO_PACKET 0x0040 /* 完成大块分解成小包输出 #define ...
最新文章
- centos6一键安装vsftpd脚本
- maven 笔记,概念
- java8函数式编程 视频_快速掌握Java8 Stream函数式编程技巧
- android SQLite查询并显示用户输入的选择信息
- tensor也可以作为索引
- 从数据仓库系统对比看Hive发展前景
- 实践篇(1)--QPG之“打狗棍法”
- c语言中的makefile编写步骤详解
- 基于python的图像处理的毕业论文_图像处理毕业论文 精品
- 江天数据220kV变电站开建 实现更高电能质量和电力可靠性
- 此时墨迹在计算机上不起作用,win7系统自带截图工具不见了怎么找回
- 国外3个设计师插画等必备PNG免扣素材网站分享
- unity算法-斜抛运动(变种)
- 1004. 伊甸园日历游戏
- 有赞实时数仓建设实践与经验
- 2022年第七届IEEE云计算与大数据分析国际会议
- SFDC common errors
- 阿里云中mysql数据库被攻击了,最终数据找回来了
- 2022国赛中职网搭 windows组策略
- 微信小程序支付功能用服务器吗,微信小程序 支付功能 服务器端(TP5.1)实现...