农村四月闲人少,勤学苦攻把名扬。这篇文章主要讲述linux中core dump开启使用教程相关的知识,希望能为你提供帮助。
**一、什么是coredump**
我们经常听到大家说到程序core掉了,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满足一定条件下(这里为什么说需要满足一定的条件呢?下面会分析)会产生一个叫做core的文件。
通常情况下,core文件会包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,我们可以理解为是程序工作当前状态存储生成第一个文件,许多的程序出错的时候都会产生一个core文件,通过工具分析这个文件,我们可以定位到程序异常退出的时候对应的堆栈调用等信息,找出问题所在并进行及时解决。
**二、cored dump开启**
1、暂时生效
ulimit -c unlimited
2、永久生效
修改/etc/security/limits.conf
* soft core unlimited
* hard core unlimited
3、永久生效
修改/etc/profile
ulimit -c unlimited
**三、设置core文件的名称和文件路径**
默认生成路径:输入可执行文件运行命令的同一路径下
默认生成名字:默认命名为core。新的core文件会覆盖旧的core文件
【linux中core dump开启使用教程】a.设置pid作为文件扩展名
1:添加pid作为扩展名,生成的core文件名称为core.pid
0:不添加pid作为扩展名,生成的core文件名称为core
修改 /proc/sys/kernel/core_uses_pid 文件内容为: 1
修改文件命令:
echo "1" >
/proc/sys/kernel/core_uses_pid
或者
sysctl -w kernel.core_uses_pid=1 kernel.core_uses_pid = 1
b. 控制core文件保存位置和文件名格式
修改文件命令: echo "/corefile/core-%e-%p-%t" >
/proc/sys/kernel/core_pattern
或者:
sysctl -w kernel.core_pattern=/corefile/core.%e.%p.%s.%E
可以将core文件统一生成到/corefile目录下,产生的文件名为core-命令名-pid-时间戳
以下是参数列表:
%p - insert pid into filename 添加pid(进程id)
%u - insert current uid into filename 添加当前uid(用户id)
%g - insert current gid into filename 添加当前gid(用户组id)
%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 添加导致产生core的命令名
3.测试是否能生成core文件
kill -s SIGSEGV $$
查看/corefile目录下是否生成了core文件
如果是需要测试go程序是否能生成core文件,需要设置环境变量GOTRACEBACK=crash
4.调试core文件
Eg. test.c
#include<
stdio.h>
int main()
{
int *p = NULL;
*p = 0;
return 0;
}
root@ubuntu:~# gcc -o test test.c
root@ubuntu:~# ./test
Segmentation fault (core dumped)
bingo:这里出现段错误并生成core文件了
在/corefile目录下发现core-test-31421-1476266571
开始调试
gdb ./test core-test-31421-1476266571
根据堆栈信息查看bug
5. 基本GDB命令
为了定位问题,常常需要进行单步跟踪,设置断点之类的操作。
下边列出了GDB一些常用的操作。
启动程序:run
设置断点:b 行号|函数名
删除断点:delete 断点编号
禁用断点:disable 断点编号
启用断点:enable 断点编号
单步跟踪:next (简写 n)
单步跟踪:step (简写 s)
打印变量:print 变量名字 (简写p)
设置变量:set var=value
查看变量类型:ptype var
顺序执行到结束:cont
顺序执行到某一行: util lineno
打印堆栈信息:bt
推荐阅读
- Java多线程开发|volatile与伪共享问题
- 使用ansible批量推送秘钥
- python——一步步教你用pyganme完成贪吃蛇小游戏(简易初版)
- windows下使用route添加路由
- Linux下使用route设置路由
- 即将完结的奈学大厂高薪必备技能训练营一期正确的打开方式
- 地铁3D可视化,让一切尽在掌握
- 51官方福利招募富文本升级版编辑器 首席体验官招募ing!
- 送你一个Python 数据排序的好方法