C语言之gdb排查崩溃之core文件

一、编译程序(-g -rdynamic)

编译源代码时指定-g -rdynamic参数,编译带有调试信息的可执行程序

二、打开core dump限制

1、通过指令打开

使用ulimit -a指令来查看系统相关的限制参数。

[11:05@zhouchao ~/c_c++]$ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 30773
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65535
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 4096
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

==注意==:通过ulimit -c unlimitedulimit -c 1024ulimit -c 0等指令来配置core dump功能,其中unlimited表示不限制,1024表示最多1024个块,0表示关闭该功能。

2、修改配置文件

修改配置文件/etc/security/limits.conf,找到#* soft core 0修改为#* soft core unlimited即可。
注意:该配置文件是一个只读文件,需要root权限chmod后才能修改内容。

 50 #<domain>      <type>  <item>         <value>
 51 #
 52 
 53 #*               soft    core            0
 54 #*               hard    rss             10000
 55 #@student        hard    nproc           20
 56 #@faculty        soft    nproc           20
 57 #@faculty        hard    nproc           50
 58 #ftp             hard    nproc           0

三、core文件名称和路径

默认生成路径:可执行文件运行命令的同一路径。
默认生成名称:core,新的文件会覆盖就的core文件。

1、设置pid作为文件扩展名

root权限下修改/proc/sys/kernel/core_uses_pid文件内容为1或0.
sysctl -w kernel.core_uses_pid=1
echo "0" > /proc/sys/kernel/core_uses_pid

1:添加pid作为文件扩展名,生成core文件为core.pid.
0:不添加pid作为文件扩展名,生成core文件为core.

[11:19@root ~]$cat /proc/sys/kernel/core_uses_pid       
0
[11:20@root ~]$sysctl -w kernel.core_uses_pid=1
kernel.core_uses_pid = 1
[11:20@root ~]$cat /proc/sys/kernel/core_uses_pid
1
[11:20@root ~]$echo "0" > /proc/sys/kernel/core_uses_pid
[11:20@root ~]$cat /proc/sys/kernel/core_uses_pid       
0
[11:20@root ~]$

2、控制core文件的保存为之和文件名格式

root权限下修改/proc/sys/kernel/core_pattern文件内容.
echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
sysctl -w kernel.core_pattern=/corefile/core.%e.%p.%s.%E

%p:进程ID(4206)
%u:用户ID(1002)
%g:用户组ID(1000)
%s:添加导致产生core的信号(11)
%t:添加core文件生成时的Unix时间(1640230181)
%h:添加主机名(localhost.localdomain)
%e:添加导致产生core的命令名(seg.bin)

[11:28@root ~]$cat /proc/sys/kernel/core_pattern
core.%e.%p.%u.%s.%g.%h.%t.%E
[11:28@root ~]$sysctl -w kernel.core_pattern=core.%e.%p.%u.%s.%g.%h.%t
kernel.core_pattern = core.%e.%p.%u.%s.%g.%h.%t
[11:33@root ~]$echo "core.%e.%p.%u.%s.%g.%h.%t" > /proc/sys/kernel/core_pattern
[11:34@root ~]$cat /proc/sys/kernel/core_pattern
core.%e.%p.%u.%s.%g.%h.%t
[11:34@root ~]$ls
core.seg.bin.13042.1002.11.1000.localhost.localdomain.1640230507

3、测试是否生效

执行kill -s SIGSEGV $$指令,查看当前目录下是否生成了core文件。

[11:34@root ~]$kill -s SIGSEGV $$
Segmentation fault (core dumped)
[11:37@zhouchao ~/c_c++]$ls
core.bash.2697.1002.11.1000.localhost.localdomain.1640230610
[11:39@zhouchao ~/c_c++]$gdb -q bash core.bash.2697.1002.11.1000.localhost.localdomain.1640230610
Reading symbols from bash...
Reading symbols from .gnu_debugdata for /usr/bin/bash...
(No debugging symbols found in .gnu_debugdata for /usr/bin/bash)
[New LWP 2697]
Core was generated by `-bash'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00007f5d0d8df6a7 in kill () from /usr/lib64/libc.so.6
(gdb) bt
#0  0x00007f5d0d8df6a7 in kill () from /usr/lib64/libc.so.6
#1  0x0000000000433bab in execute_command ()
#2  0x000000000041e285 in reader_loop ()
#3  0x000000000041c8ee in main ()
(gdb) _

四、通过core文件排查错误

执行gdb [exec-file] [core-file]gdb -c [core-file] [exec-file]指令来查看core文件内容,通过bt指令查看堆栈信息。

[11:45@zhouchao ~/c_c++]$gdb -q ./seg core.seg.27060.11.1640231023 
Reading symbols from ./seg...
[New LWP 27060]
Core was generated by `./seg'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x0000000000400885 in test_ptr (ptr=0x0) at test.c:21
21          printf("ptr = %p, a = %u, b = %f.\n", ptr, ptr->a, (*ptr).b);
(gdb) bt
#0  0x0000000000400885 in test_ptr (ptr=0x0) at test.c:21
#1  0x0000000000400912 in main () at test.c:33
(gdb) q
[11:46@zhouchao ~/c_c++]$gdb -q -c core.seg.27060.11.1640231023 ./seg 
Reading symbols from ./seg...
[New LWP 27060]
Core was generated by `./seg'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x0000000000400885 in test_ptr (ptr=0x0) at test.c:21
21          printf("ptr = %p, a = %u, b = %f.\n", ptr, ptr->a, (*ptr).b);
(gdb) bt
#0  0x0000000000400885 in test_ptr (ptr=0x0) at test.c:21
#1  0x0000000000400912 in main () at test.c:33
(gdb) q
[11:46@zhouchao ~/c_c++]$
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358

推荐阅读更多精彩内容

  • 1、core文件简介 core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行调试。当...
    六弦极品阅读 426评论 0 0
  • 什么是 core dump ? 进程接收到某些信号(signal)后, 异常终止,并记录当前内存等状态的镜像文件,...
    Lionel_素心阅读 6,153评论 0 3
  • 一、core 文件的生成 C程序因为segment fault(段错误)崩溃时,如果系统core dump功能是打...
    zhuweipu阅读 2,411评论 0 2
  • 在Linux下程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。使...
    随风化作雨阅读 45,625评论 2 15
  • 对于c程序员来说,core文件是分析内存错误的有用的文件,结合gdb命令,一般情况下(有时候代码编译的时候没有包含...
    fa9c93b81e43阅读 5,617评论 0 1