Coredump(tracedump)

引言当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中(core文件),这种行为就叫做CoreDump或者叫做‘核心转储’,利用coredump可以帮助我们快速定位程序崩溃位置开启coredump终端输入命令:ulimit-a用来显示对进程的一些限制限制,其中第一行表示了core文件最大的大小限制(单位为blocks)默认是…

大家好,又见面了,我是你们的朋友全栈君。

引言

当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中(core文件),这种行为就叫做 Core Dump 或者叫做 ‘核心转储’,利用 coredump 可以帮助我们快速定位程序崩溃位置

开启 coredump

终端输入命令:ulimit -a 用来显示对进程的一些限制限制,其中第一行表示了 core 文件最大的大小限制(单位为 blocks)默认是 0
在这里插入图片描述

开启核心转储
终端输入:ulimit -c unlimited 不对生成的核心转储文件进行大小限制也可以指定大小,ulimit -c 查看
在这里插入图片描述

gdb 调试 core 文件

准备:

#include <cstdio>

int test1(int a, int b) { 
   
    return a+b;
}
void test2() { 
   
    char* str = "hello~";
    str[0] = '0'; //段错误程序终止,生成core文件
}
void test3() { 
   
    printf("world~~\n");
}

int main() { 
   
    test1(1, 2);
    test2();
    test3();

    return 0;
}

./test 执行文件后 发生段错误程序终止,并且生成 core 文件
在这里插入图片描述
file core.22187 查看文件信息
在这里插入图片描述

gdb ./test core.22187 利用 gdb 进行 coredump 定位,可以看到程序终止是因为signal 11 并且段错误发生在第 15 行,因为 str[0] = ‘0’
在这里插入图片描述

开始调试:在 15 行发生段错误,信号 SIGSEGV 导致程序终止
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128540.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • extern用法总结!

    extern用法总结!

    2021年12月1日
    43
  • 五大主流浏览器及四大内核

    五大主流浏览器及四大内核

    2021年10月23日
    73
  • c语言怎么使用strstr函数,c语言中strstr函数的用法是什么?[通俗易懂]

    c语言怎么使用strstr函数,c语言中strstr函数的用法是什么?[通俗易懂]c语言中“strstr(str1,str2)”函数用于判断字符串“str2”是否是“str1”的子串;如果是,则该函数返回“str2”在“str1”中首次出现的地址;否则返回NULL。其语法为“*strstr(str1,str2)”。strstr(str1,str2)函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。C语…

    2022年10月15日
    3
  • 角度和弧度之间的转换

    角度和弧度之间的转换在编程中,我们经常会用到角度或者弧度,但是往往我们所得到的不是角度就是弧度,需要转换一下才能用到,这里我总结了角度和弧度之间的转换,1、转换方法:角度转弧度π/180×角度弧度变角度180/π×弧度例:角度转弧度//其中a是最开始的角度,现在将它转换成弧度制a//4*atan(1.0)就是我们用到的圆周率π,不管角度还是弧度,都是double型voidCBa…

    2022年6月23日
    34
  • oracle ORA-00918 未明确定义列「建议收藏」

    oracle ORA-00918 未明确定义列「建议收藏」 出现这种错误,一般是列名重复导致的,如下: createtabletestchar(v_datevarchar2(20),d_datedate)insertintotestcharselect’2018-07-20′,date’2018-07-20’fromdual;#这时候有两个字段都是vv,那么查询时,就会区分不出来这两列,oracl…

    2022年10月4日
    3
  • 瓦片地图拼接_开源瓦片地图

    瓦片地图拼接_开源瓦片地图瓦片地图(TiledMap)瓦片地图(TileMap)不但生成简单,并且可以灵活的用于Cocos2d-x引擎。不论你的游戏是角色扮演游戏,平台动作游戏或仿打砖块游戏,这些游戏地图可以使用开源的瓦片地图编辑器TiledMapEditor生成并保存为TMX文件格式,被Cocos2d-x支持。TMX瓦片地图格式Cocos2d支持被Tiled创建的地图文件(TMX)。Tiled的2个版本…

    2025年8月16日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号