在Linux系统中如何使用gdb进行调试核心文件

  介绍

这篇文章将为大家详细讲解有关在Linux系统中如何使用gdb进行调试核心文件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

当程序运行过程中出现段错误(信息转储)错误时,程序停止运行,并产生核心文件.core文件是程序运行状态的内存映象。使用gdb调试核心文件,可以帮助我们快速定位程序出现段错误的位置。当然,可执行程序编译时应加上- g编译选项,生成调试信息。

当程序访问的内存超出了系统给定的内存空间,就会产生段错误(信息转储),因此,段错误产生的情况主要有:

(1)访问不存在的内存地址;
(2)访问系统保护的内存地址;
(3)数组访问越界等。

信息转储又叫核心转储,当程序运行过程中发生异常,程序异常退出时,由操作系统把程序当前的内存状况存储在一个核心文件中,叫核心倾倒。

核心意指核心内存,用线圈做的内存。如今,半导体工业澎勃发展,已经没有人用核心内存了,不过,在许多情况下,人们还是把记忆体叫作核心。

<强>

(1)使用ulimit - c命令可查看核心文件的生成开关。若结果为0,则表示关闭了此功能,不会生成核心文件。

(2)使用ulimit - c文件大小命令,可以限制核心文件的大小(文件大小的单位为KB)。如果生成的信息超过此大小,将会被裁剪,最终生成一个不完整的核心文件。在调试此核心文件的时候,gdb会提示错误。比如:ulimit - c 1024 .

(3)使用ulimit - c无限,则表示核心文件的大小不受限制。

在终端通过命令ulimit - c无限只是临时修改,重启后无效,要想永久修改有三种方式:

(1)在/etc/rc。当地中增加一行ulimit - c无限

(2)在/etc/profile中增加一行ulimit - c无限

(3)在/etc/安全/限制。配置最后增加如下两行记录:

 @root软核心无限
  @root核心无限

核心默认的文件名称是核心。pid、pid指的是产生段错误的程序的进程号。
默认路径是产生段错误的程序的当前目录。

如果想修改核心文件的名称和生成路径,相关的配置文件为:
/proc/sys/kernel/core_uses_pid:控制产生的核心文件的文件名中是否添加pid作为扩展,如果添加则文件内容为1,否则为0。

/proc/sys/kernel/core_pattern:可以设置格式化的核心文件保存的位置和文件名,比如原来文件内容是核心——% e。
可以这样修改:
echo "/corefile/核心- % % p - e - % t”比;/proc/sys/kernel/core_pattern
将会控制所产生的核心文件会存放到/corefile目录下,产生的文件名为:核心——命令名pid -时间戳。

以下是参数列表:

% p - pid插入文件名添加pid
% u -当前uid插入文件名添加当前uid
% g -当前gid插入文件名添加当前gid
% s -信号导致coredump插入文件名添加导致产生核心的信号
% t - UNIX时间coredump发生插入文件名添加核心文件生成时的UNIX时间
% h -主机名coredump发生插入文件名添加主机名
% e - coredumping可执行文件的名字插入文件名添加命令名。

一般情况下,无需修改,按照默认的方式即可。

使用gdb调试核心文件来查找程序中出现段错误的位置时,要注意的是可执行程序在编译的时候需要加上- g编译命令选项。

gdb调试核心文件的步骤常见的有如下几种,推荐第一种。

<强>具体步骤一:

(1)启动gdb,进入核心文件,命令格式:gdb [exec文件][核心文件]。
用法示例:gdb。/测试测试。核心。

(2)在进入gdb后,查找段错误位置:地方或者bt

用法示例:

在Linux系统中如何使用gdb进行调试核心文件

可以定位到源程序中具体文件的具体位置,出现了段错误。

<强>具体步骤二:

(1)启动gdb,进入核心文件,命令格式:gdb生水=[核心文件]。
用法示例:gdb生水=测试。核心。

(2)在进入gdb后,指定核心文件对应的符号表,命令格式:文件(exec文件)。
用法示例:在Linux系统中如何使用gdb进行调试核心文件

<强>具体步骤三:

(1)启动gdb,进入核心文件,命令格式:gdb - c[核心文件]。
用法示例:gdb生水起测试。核心。
(2)其它步骤同步骤二。

关于在Linux系统中如何使用gdb进行调试核心文件就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

在Linux系统中如何使用gdb进行调试核心文件