linux下core文件设置与生成coredump文件

1、core文件设置
一、core文件的生成开关和大小限制
(1)使用ulimit -c 查看,若为0,则表示关闭了此功能,不会生成core
(2)ulimit -c filesize 限制core的大小 单位kbyte
ulimit -c unlimited 大小不受限制html

2.core文件的名称和生成路径
若系统生成的core文件不带其它任何扩展名称,则所有命名为core。新的core文件生成将覆盖原来的core文件。sass

(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)proc/sys/kernel/core_pattern能够控制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 添加命令名app

3.用gdb查看core文件:
下面咱们能够在发生运行时信号引发的错误时发生core dump了.
发生core dump以后, 用gdb进行查看core文件的内容, 以定位文件中引起core dump的行.
gdb [exec file] [core file]
如:
gdb ./test test.core
在进入gdb后, 用bt命令查看backtrace以检查发生程序运行到哪里, 来定位core dump的文件->行.函数

2、使用GDB生成coredump文件
若是在测试过程当中遇到某个进程的CPU利用率太高或者卡死而须要去调试该进程时,
能够利用gdb命令生成coredump文件,而后再去调试coredump文件来定位问题。工具

那么如何使用gdb生成coredump文件呢?其实步骤很简单:测试

1. 安装好gdb,而后使用命令 'gdb'。(假设须要调试的进程号为 21509)
2. 使用 ‘attach 21590’命令将gdb附加到进程21509上。
3. 使用‘gcore core_name’命令生成coredump文件core_name。
4. 使用‘detach’命令断开链接。
5.使用‘q’命令退出gdb。ui

此时,在当前目录下就会产生一个名为core_name的coredump文件。下面就能够利用gdb工具来对该coredump文件进行调试了。spa

3、GDB调试
gdb的调试步骤
一、启动gdb(gdb ./a.out).net

二、设置输入参数
(gdb) set args 3

三、打印代码
(gdb)list line(行号)

四、设置断点
(gdb)b 46(行号)

五、运行程序
(gdb)run 

六、显示变量
(gdb)display i
(gdb)c (继续运行)

七、修改变量的值
(gdb) set result=9

八、退出gdb
(gdb) q

gdb经常使用命令
list  list[开始,结束]    列出文件的代码清单 l
print   print p   打印变量的内容  p
break  break[行号|函数名] 设置断点   b
continue continue[开始,结束] 继续运行   c
info  info pass  列出信息   i
next  next   下一行   n
setp  setp   进入函数   S
display  dispaly pass   显示参数  
file  file path  加载文件 
run  run args  运行程序   r

九、加载文件
启动gdb是没有选择程序名称
能够
(gdb)file test

十、参数默认参数值
(gdb)set args 3
(gdb)show args

十一、打印变量名和表达式
(gdb) print var
(gdb) p 2+3
(gdb) p sum(3)
(gdb) p *io (打印结构体的各成员的值)
$9 = {value = 3, result = 6}
(gdb)p $9

十二、设置断点
break 行号:程序中止在设定的行号以前
break 函数名称:在设定的函数以前
break 行号或者函数if条件:若是条件为真。则程序在到达指定行或者函数时中止
(gdb) b ex02-gdb-01.c:46
(gdb) b ex02-gdb-01.c:sum
(gdb) b 46 if i==2
(1)显示断点
(gdb) info b
(2)删除断点
(gdb) delete b 8 (断点编号)
(3)禁用断点
(gdb) disable b 9
(4)启动断点
(gdb) enable b 8
(5)清除断点
clean line
(gdb) clean 9

1三、变量检查
(gdb)whatis *io
(gdb)ptype *io 

1四、调用路径
backtrace 命令能够打印函数调用的路径、提供向前跟踪的功能
backtrace 打印一个顺序列表,函数从最近到最远的调用过程,包涵调用函数和其中参数,简写bt
在第46行设置断点后打印调用过程
(gdb) bt

1五、info

1六、多线程
一、先获取线程的id,而后转到改线程进行调试
info thread列出当前进程中的线程号,其中最前面为调试的id
用thread id 进入线程

1七、disassemble
(gdb) disassemble sum 

1八、help

参考:

(1)http://blog.csdn.net/sky_qing/article/details/8548989

(2)http://blog.chinaunix.net/uid-16979052-id-3431343.html

相关文章
相关标签/搜索