GDB调试器与Core dump

GDB调试器与Core dump

GDB是Unix/Linux下的一款基于命令行的程序调试工具,其简单的命令和强大的功能是众多开发者喜欢的理由,搭配Core dump对一个程序进行追踪则更能够大显身手。

前提条件:

一个程序如果想使用GDB调试,则需要在编译过程中加入调试信息。命令如下:
gcc -g filename.c -o filename
使用 -g 参数,使得编译的程序带上调试信息,才能够在gdb下得以调试。

GDB的基本使用:

GDB这款调试器的使用非常简单明了,这里笔者引用CSDN上Liigo的整理的一张表(感谢作者):
可以看到,我们通过 r 命令来启动调试,通过 b 来设置断点, n 来进行单步跳过,s 来进行单步执行,i b来显示当前已设置的断点,d 编号 来删除断点,p 变量名 来打印一个变量的值,set 变量名来设置变量的值,q来退出调试。了解了GDB的简单实用,笔者就来介绍Core dump又是什么。

Core dump:

Core dump是Unix/Linux下的核心转储,即当一个进程异常退出之前,将进程的用户空间内存数据全部以文件方式保存到磁盘上,文件名则称作是core,方便gdb的调试。系统默认是关闭的,我们需要执行命令设置转储的大小:
ulimit -c unlimited
设置核心转储的大小无限制,当然安全起见我们可以设置为1024。如果需要关闭这个功能,则设置为0。
我们将一个可能发生错误的程序,在gcc编译的时候加上-g选项填入调试信息,然后打开了Core dump功能,当程序发生异常退出时,在程序当前文件夹下会生成一个名为 core.编号 的文件,这个就是我们出错的核心转储问文件。有了这个文件,我们就可以使用gdb来还原错误发生的位置和过程。命令如下:
gdb filename core.编号
然后我们就可以查看到发生错误的位置和信息,我们根据这个信息来找到bug并加以修复。笔者这里不提供Linux上的实操图,希望读者自行测试,眼看千遍不如手过一遍。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章