Linux Core Dump设置,linux下core文件设置与生成coredump文件

一、core文件设置

1、core文件的生成开关和大小限制

(1)使用ulimit -c 查看,若为0,则表示关闭了此功能,不会生成core

(2)ulimit -c filesize 限制core的大小 单位kbyte

ulimit -c unlimited 大小不受限制

2.core文件的名称和生成路径

若系统生成的core文件不带其它任何扩展名称,则全部命名为core。新的core文件生成将覆盖原来的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)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 添加命令名

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的文件->行.

二、使用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。

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

三、GDB调试

gdb的调试步骤

1、启动gdb(gdb ./a.out)

2、设置输入参数

(gdb) set args 3

3、打印代码

(gdb)list line(行号)

4、设置断点

(gdb)b 46(行号)

5、运行程序

(gdb)run

6、显示变量

(gdb)display i

(gdb)c (继续运行)

7、修改变量的值

(gdb) set result=9

8、退出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

9、加载文件

启动gdb是没有选择程序名称

可以

(gdb)file test

10、参数默认参数值

(gdb)set args 3

(gdb)show args

11、打印变量名和表达式

(gdb) print var

(gdb) p 2+3

(gdb) p sum(3)

(gdb) p *io (打印结构体的各成员的值)

$9 = {value = 3, result = 6}

(gdb)p $9

12、设置断点

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

13、变量检查

(gdb)whatis *io

(gdb)ptype *io

14、调用路径

backtrace 命令可以打印函数调用的路径、提供向前跟踪的功能

backtrace 打印一个顺序列表,函数从最近到最远的调用过程,包涵调用函数和其中参数,简写bt

在第46行设置断点后打印调用过程

(gdb) bt

15、info

16、多线程

1、先获取线程的id,然后转到改线程进行调试

info thread列出当前进程中的线程号,其中最前面为调试的id

用thread id 进入线程

17、disassemble

(gdb) disassemble sum

18、help

参考:

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

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

来源:oschina

链接:https://my.oschina.net/u/2294938/blog/672611

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值