您的位置:首页 > 其它

GDB之coredump的学习

2016-03-19 20:45 369 查看
在Linux环境下运行程序的时候有的时候会出现一些问题,这个时候就可以使用GDB工具进行调试,以下是公司实习期间学习GDB的一些总结。

1、GDB的简介

GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。

一般来说,GDB主要完成以下四个方面的功能:

(1)启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。

(2)可让被调试的程序在你所指定的调试的断点处挺住。

(3)当程序被停住时,可以检查此时你的程序中所发生的事。

(4)动态的改变你程序的执行环境。

2、GDB的常用命令

(1)bt,查看栈调用信息;bt full查看详细栈调用信息。

(2)frame n ,跳转到指定的栈n

(3)up/down,栈调用上/下移一个函数调用

(4)print,打印命令,简写p

print var :打印变量的值

print &var ;打印变量的地址

print *address :打印地址的数据值

(5)list ,简写l,列出源码信息

(6)info args ,查看函数参数信息

(7)info locals ,查看函数中局部变量的信息

(8)info register ,查看cpu寄存器的信息

3、coredump的介绍

通常情况下coredump包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息等。可以理解为把程序工作的当前状态存储成一个文件(core文件)。

设置core文件大小非0,两种方式

1.
ulimit –csize

2.
调用setrlimit()在代码中设置

设置corepattern

echo /nfs/coredump/core-%e-%p-%s-%t>
/proc/sys/kernel/core_pattern
以下是参数列表:

%p- pid

%u - 当前uid

%g - 当前gid

%s - 导致产生core的信号

%t -core文件生成时的unix时间

%h - 主机名

%e - 可执行文件名

4、如果系统中没有安装GDB或者不能生成coredump,可以通过在代码中添加如下代码产生coredump:

#include <sys/time.h>
#include <sys/resource.h>

struct rlimit rlim;
rlim.rlim_cur =RLIM_INFINITY;
rlim.rlim_max=RLIM_INFINITY;
setrlimit(RLIMIT_CORE,&rlim);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: