GDB(四):gdb coredump

来源:互联网 发布:mysql数据库表设计 编辑:程序博客网 时间:2024/05/20 10:53
1 coredump文件
        core dump说的是操作系统执行的一个动作,当某个进程因为一些原因意外终止(crash)的时候(即一般都是在进程收到某个信号的时候),操作系统会将这个进程当时的内存信息转储(dump)到磁盘上。产生的文件就是core文件了,一般会以core.xxx形式命名。

针对特定的信号,应用程序可以写对应的信号处理函数。如果不指定,则采取默认的处理方式, 默认处理是coredump的信号如下:

3)SIGQUIT   4)SIGILL    6)SIGABRT   8)SIGFPE    11)SIGSEGV    7)SIGBUS    31)SIGSYS5)SIGTRAP   24)SIGXCPU  25)SIGXFSZ  29)SIGIOT

2 coredump文件的大小与生成路径
2.1 coredump文件的大小
ulimit -c  命令可查看coredump文件的大小,当值为0时,表示不生成coredump的文件。
ulimit -c filesize 命令可设置coredump文件的大小(单位KB),而ulimit -c unlimited 则表示coredump文件大小不受限制。

2.2 coredump文件的生成路径
cat /proc/sys/kernel/core_pattern 命令可查看coredump文件的生成路径。
<1>临时修改coredump文件的生成路径
   echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

<2>永久修改coredump文件的生成路径
   设置生成路径的参数列表: 
   %p - insert pid into filename 添加 pid
    %u - insert current uid into filename 添加当前 uid
    %g - insert current gid into filename 添加当前 gid
    %s - insert signal that caused the coredump into the filename 添加导致产生 core 的信号
    %t - insert UNIX time that the coredump occurred into filename 添加 core 文件生成时的 unix 时间
    %h - insert hostname where the coredump happened into filename 添加主机名
    %e - insert coredumping executable name into filename 添加命令名
步骤1:在etc/sysctl.conf 配置文件添加一行:kernel.core_pattern = /corefile/core-%e-%p-%t
步骤2:执行命令:sysctl -p

3 使用gdb生成coredump

        如果在测试过程中遇到某个进程的CPU利用率过高或者卡死而需要去调试该进程时,可以利用gdb命令生成coredump文件,然后再去调试coredump文件来定位问题。

那么如何使用gdb生成coredump文件呢?其实步骤很简单:


1>. 安装好gdb,然后使用命令 'gdb'。(假设需要调试的进程号为 21509)

2>. 使用 ‘attach 21590’命令将gdb附加到进程21509上。

3>. 使用‘gcore core_name’命令生成coredump文件core_name。

4>. 使用‘detach’命令断开连接。

5>.使用‘q’命令退出gdb。


此时,在当前目录下就会产生一个名为core_name的coredump文件。下面就可以利用gdb工具来对该coredump文件进行调试了。


注:摘自互联网

0 0
原创粉丝点击