GDB之coredump的学习

来源:互联网 发布:影视cms系统 编辑:程序博客网 时间:2024/05/18 19:23

在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);

2 0
原创粉丝点击