文档章节

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

翼动动空
 翼动动空
发布于 2016/05/10 10:18
字数 1291
阅读 1188
收藏 3

一、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

    

© 著作权归作者所有

翼动动空
粉丝 16
博文 69
码字总数 36207
作品 0
成都
程序员
私信 提问
段错误调试神器 - Core Dump详解

一、前言: 有的程序可以通过编译, 但在运行时会出现Segment fault(段错误). 这通常都是指针错误引起的. 但这不像编译错误一样会提示到文件某一行, 而是没有任何信息, 使得我们的调试变得困难...

果树啊
01/02
14
0
linux/Ubuntu下生成core dump文件调试方法

一、linux下生成core dump文件调试方法及设置 转自:http://andyniu.iteye.com/blog/1965571 core dump的概念: A core dump is the recorded state of the working memory of a computer pr......

byxdaz
05/30
0
0
关于coredump文件生成与查看

博客园闪存首页新随笔联系管理订阅随笔- 711 文章- 0 评论- 230 Linux core 文件介绍 1. core文件的简单介绍 在一个程序崩溃时,它一般会在指定目录下生成一个core文件。core文件仅仅是一个内...

01010101010101010101
2014/01/03
859
0
Linux的Core文件设置与调试

一、运行时错误 任何人写程序都会出错,正如《C++编程规范》所说,真正可怕的错误不是编译时的错误,而是运行时错误。 有的程序可以通过编译, 但在运行时会出现Segment fault(段错误) 这通常...

shezjl
2015/08/11
1K
0
ubuntu core 文件产生

关于内核转储的设置方法 1. 内核转储作用 (1) 内核转储的最大好处是能够保存问题发生时的状态。 (2) 只要有可执行文件和内核转储,就可以知道进程当时的状态。 (3) 只要获取内核转储,那么即...

oppotvr
2014/09/15
2.8K
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么要在网站中应用CDN加速?

1. 网页加载速度更快 在网站中使用CDN技术最直接的一个好处就是它可以加快网页的加载速度。首先,CDN加速的内容分发是基于服务器缓存的,由于CDN中缓存了不少数据,它能够给用户提供更快的页...

云漫网络Ruan
15分钟前
2
0
亚玛芬体育(Amer Sports)和信必优正式启动合作开发Movesense创新

亚玛芬体育和信必优正式启动合作开发Movesense创新,作为亚玛芬体育的完美技术搭档,信必优利用Movesense传感器技术为第三方开发移动应用和服务。 Movesense基于传感器技术和开放的API,测量...

symbiochina88
26分钟前
2
0
创龙TI AM437x ARM Cortex-A9 + Xilinx Spartan-6 FPGA核心板规格书

SOM-TL437xF是一款广州创龙基于TI AM437x ARM Cortex-A9 + Xilinx Spartan-6 FPGA芯片设计的核心板,采用沉金无铅工艺的10层板设计,适用于高速数据采集和处理系统、汽车导航、工业自动化等领...

Tronlong创龙
26分钟前
2
0
好程序员Java学习路线分享MyBatis之线程优化

  好程序员Java学习路线分享MyBatis之线程优化,我们的项目存在大量用户同时访问的情况,那么就会出现大量线程并发访问数据库,这样会带来线程同步问题,本章我们将讨论MyBatis的线程同步问...

好程序员官方
32分钟前
6
0
IDEA 自定义方法注解模板

IDEA 自定义方法注解模板 1、使用效果 /*** 计算交易费用* @Author wangjiafang* @Date 2019/9/11* @param feeComputeVo* @return*/@PostMapping("/v1/fee_compute")public ApiResp......

小白的成长
32分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部