core文件的产生与调试

本文详细介绍了在Linux系统中如何生成和利用core文件进行程序崩溃后的调试。包括设置core文件大小,确保编译时带有-g标志,以及通过修改内核参数使每个进程生成带pid的core文件。并通过实例演示了使用gdb读取core文件定位崩溃原因的过程。

在linux系统下运行程序,假如程序崩溃,则当前目录下将出现一个名为core...的文件,记录崩溃的相关信息。

目录

core的产生标志

编译

core文件的命名

调试


core的产生标志

在命令行输入ulimit -a,假如打印的结果第一行(core file size) 返回值为0,则core文件不会生成。此时,程序员可以输入:

ulimit -c 1024

 撰稿时,我注意到,当自己以sudo权限操作时,ulimt -c 指令可能失灵。解决办法是关掉当前命令行,重新开一个。

编译

在前一篇博客《首次gdb调试》中,我们看到产生的可执行文件编译时要有-g标志,否则bt命令难以回溯到具体的崩溃位置。同样,假如编译可执行文件时没有-g标志,core文件中也不能获取崩溃的具体信息。

g++ main.cpp -g -o main.out

core文件的命名

default情况下,core文件的名字就是core。但是如果程序中跑了多个进程,则程序员肯定希望每个进程都有自己的core文件,且能通过pid号来区分各个文件。此时,程序员可以通过如下命令,将每个进程的core文件后面加上进程pid来区别:

echo "1" > /proc/sys/kernel/core_uses_pid 

假如界面反馈权限不够,则采用nano来编辑该文件:

sudo nano /proc/sys/kernel/core_uses_pid 

调试

按照下图输入指令,完成编译。然后运行可执行文件,返回“段错误”。

运行后,执行ls命令,你将看到core.XXXX文件,其中XXXX是进程号。

执行如下命令,追踪到具体的崩溃位置(下图红线指示了各步操作):

gdb  ./main.out
core-file core.XXXX
bt

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值