大家好,又见面了,我是你们的朋友全栈君。
引言
当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中(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 导致程序终止
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/128540.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...