2-3 Coredump程序故障分析

(本节笔记的实验代码在这里:)

1.  定义:核心转存,当程序运行过程中发生异常时,Linux把程序出错时的内存内容存储在一个Core文件中。

2.  处理对象:Segment fault(段错误)
3.  产生原因:数组访问越界、访问空指针、栈溢出、修改只读内存等
4.  用法:先打开ulimit -c unlimited   这个选项如果打开了,就有可能产生大量的文件,因此默认状态下是关闭的
                  想要关闭,就 ulimit -c 0
        在发生Coredump后,用gdb进行查看,如:gdb ./test test.core   这里的test是程序名,test.core是产生出来的Core文件。不过这个test程序必须加[-g]选项进行编译,否则无法通过gdb进行调试。


用法举例:


#include <stdio.h>
#include <stdlib.h>
int main(int argc, char ** argv)
{
    char *ptr = "123456";    /*  字符串常亮  */
    ptr[0] = '3';  /*  不能修改第一个字符的值,这里会产生段错误  */
    return 0;
}
gcc -g test_1.c -o test_1
./test_1
Segment fault (core dump)
gdb ./test_1 core.12566
显示错误的信息为:
#0 0x0804083a4 in main() at test_1.c : 8
  8    ptr[0] = '3'; 


#include <stdio.h>
#include <stdlib.h>
int main(int argc, char ** argv)
{
    int *ptr = NULL;
    *ptr = 0;  /*  不能把0赋值给空指针,这里会产生段错误  */
    return 0;
}
gcc -g test_2.c -o test_2
./test_2
Segment fault (core dump)
gdb ./test_2 core.12592
显示错误的信息为:
#0 0x0804083a4 in main() at test_2.c : 8
  8    *ptr = 0;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值