C语言段错误-core文件

目录

生成core文件

1. 添加生成core文件的准备

2. 修改配置文件

3. 重新执行一下,使能配置文件

core文件的解析

整体使用示例

1. 写一个最简单的段错误的文件(给空指针赋值)

2. 编译执行

3. gdb执行core文件

--end--


生成core文件

1. 添加生成core文件的准备

ulimit -SHc unlimited
ulimit -u unlimited

2. 修改配置文件

vi /etc/sysctl.conf
kernel.core_pattern = /tmp/core-%e-%p

# 在文件的最后 添加上面这条命令,这条命令,是默认的保存位置,当前设置的保存位置是 /tmp/目录下
# 文件名为 core-命令名-pid

# 如果不添加这个,产生的core文件,默认 会在执行可执行文件时 所在的目录下,文件名为 core

3. 重新执行一下,使能配置文件

sysctl -p /etc/sysctl.conf

core文件的解析

gdb <产生当前段错误的可执行文件> <产生的core文件>

进入gdb调试工具后

输入 bt

打印出来的就是 产生 段错误(核心已转储)的对应位置,及原因

 

整体使用示例

1. 写一个最简单的段错误的文件(给空指针赋值)

#include <stdio.h>

int test()
{
    int *ptr = NULL;
    *ptr = 0;
}

int main()
{
    test();
    return 0;
}

2. 编译执行

3. gdb执行core文件

3.1 core文件名称

-rw------- 1 root root 245760 Sep  4 12:38 core_a.out_212167

3.2 gdb执行(我把可执行文件拿过来了--这样看起来比较简洁)

gdb ./a.out core_a.out_212167

3.3 回车后具体显示如下

3.4 输出 bt 回车

 根据 #0 能看出来 产生段错误的原因在 test() 函数中,所以可以直接去看一下 具体代码,分析产生的原因(或者添加打印一些调试信息)

 

--end--

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值