简单复习gdb使用和core文件的生成方法和配置
文章目录一、如何生成core文件1)设置core文件开关1)查看生成core文件的开关是否开启,输入命令# ulimit -a2)使用#ulimit -c [kbytes]可以设置系统允许生成的core文件大小;3) 永久生效修改coresize的方式4)指定生成文件的路径和名字;执行# vim /etc/sysctl.conf,进入编辑模式,加入下面两行5)测试是否能生成core文件:二、gdb
文章目录
一、如何生成core文件
1)设置core文件开关
Linux环境下进程发生异常而挂掉,通常很难查找原因,但是一般Linux内核给我们提供的核心文件,记录了进程在崩溃时候的信息。但是生成core文件需要设置开关
1)查看生成core文件的开关是否开启,输入命令# ulimit -a
我们看到,第一行core文件大小为0,没有开启。
2)使用#ulimit -c [kbytes]可以设置系统允许生成的core文件大小;
ulimit -c 0 不产生core文件
ulimit -c 100 设置core文件最大为100k
ulimit -c unlimited 不限制core文件大小
这样进程崩溃就可以生成core文件了,这种方法只能在shell中生效,下面说一下永久生效的方法:
3) 永久生效修改coresize的方式
#vim /etc/profile,然后进入编辑模式,在profile文件中加入
ulimit -c unlimited
保存退出,重启服务器,改文件就长久生效,或者#source /etc/profile,不重启服务器,使用source使文件马上生效。
4)指定生成文件的路径和名字;执行# vim /etc/sysctl.conf,进入编辑模式,加入下面两行
1)默认生成的core文件保存在可执行文件所在的目录下,文件名为core。
2)通过修改/proc/sys/kernel/core_uses_pid文件使生成的core文件加上pid号,echo 1>/proc/sys/kernel/core_uses_pid
3)还可以通过修改/proc/sys/kernel/core_pattern控制生成的core文件保存的位置以及文件名
4)或者:
sysctl -w kernel.core_pattern=/corefile/core-%e-%p-%t kernel.core_pattern = /corefile/core-%e-%p-%t
可以将core文件统一生成到/corefile目录下,产生的文件名为core-命令名-pid-时间戳
5)按照标题那样
kernel.core_pattern=/tmp/corefile/core_%e_%p
kernel.core_uses_pid=0
在var下创建core目录,用# sysctl –p /etc/sysctl.conf,是修改马上生效。
core_pattern的命名参数如下:
%c 转储文件的大小上限
%e 所dump的文件名
%g 所dump的进程的实际组ID
%h 主机名
%p 所dump的进程PID
%s 导致本次coredump的信号
%t 转储时刻(由1970年1月1日起计的秒数)
%u 所dump进程的实际用户ID
5)测试是否能生成core文件:
kill -s SIGSEGV $$
查看/home目录下是否生成了core文件
二、gdb预热
1) gcc编译debug版本
gcc -g -o main main.c 编译时需要注意带-g,生成可执行文件main,运行可以在当前目录得到core文件。
2) cmake设置编译debug版本
三、开始gdb调试
GDB调试core文件,查看程序挂在位置。当core dump 之后,使用命令 gdb program core 来查看 core 文件,其中 program 为可执行程序名,core 为生成的 core 文件名。
更多推荐