您的位置:首页 > 运维架构 > Linux

linux中gdb的使用方法

2015-06-22 20:20 555 查看
1.gdb

GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。

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

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

(2)可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)

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

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

2.gdb使用方法

(1)gdb programname

program也就是你的执行文件,一般在当然目录下。

(2)gdb programname core

用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。

使用GDB,先从可执行文件中读取符号表(也就是用户定义的函数名称、变量名称等)信息,然后读取Core文件。如果不与可执行文件搅合在一起可以吗?答案是不行,因为Core文件中没有符号表信息,无法进行调试。

(3)gdb programname PID

如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试他。program应该在PATH环境变量中搜索得到。

3.gdb的常用使用方法



4.core dump文件的生成方式

core dump文件,又称为核心转储文件。该文件的生成方式有如下几种:

(1)操作系统生成

当进程异常终止或者退出的时候,由操作系统把该进程当前运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,写入到一个文件中,放到指定的位置。这个就是由操作系统生成core文件。

(2)使用gdb工具人工生成

步骤一:运行gdb命令

步骤二:在gdb工具中使用attach pid命令,将gdb附着到进程号为pid的进程上

步骤三:在gdb工具中使用gcore corename命令,生成名称为corename的core文件

步骤四:在gdb工具中使用detach命令,解除附着关联目标进程

步骤五:在gdb工具中使用q命令,退出gdb工具

(3)使用gcore工具人工生成

gcore不是二进制程序,而是一个shell脚本,该脚本可以生成指定进程的core文件。其实现原理和(2)是一样的。

gcore使用方法:

gcore -o corename pid 其中-o选项是可选的,表示将core dump文件写入到指定文件名corename的文件中。

5.core dump文件的闲杂知识

(1)ulimit工具可以修改用户的core文件大小的配置,如果配额是0,那么表示不允许产生core文件

(2)操作系统生成core文件的存储路径和core文件名的配置。

默认情况下,os生成的core文件和程序bin文件在同一个目录下,且core文件的名称固定为core。我们可以通过修改/proc/sys/kernel/core_pattern文件来修改这个默认配置。

例如如果将/proc/sys/kernel/core_pattern文件的内容修改为/home/coresave/core.%e.%p.%t

表示core文件产出在/home/coresave目录中,且文件名的形式为“core.程序文件名.进程id.产生core文件的时间”

参数的含义为:

%% 单个%字符
%p 所dump进程的进程ID
%u 所dump进程的实际用户ID
%g 所dump进程的实际组ID
%s 导致本次core dump的信号
%t core dump的时间 (由1970年1月1日计起的秒数)
%h 主机名
%e 程序文件名


参考资料来源于:
http://blog.csdn.net/haoel/article/details/2879 http://jimmyleeee.blog.163.com/blog/static/930961820103822435873/ http://baidutech.blog.51cto.com/4114344/904419/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: