引言
当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中(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 导致程序终止
今天的文章Coredump 详解分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/6195.html