首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

GDB 调试 Core Dump 实战:从段错误定位到代码行

     編輯:關於C++

Core Dump 简介

Core 文件是进程崩溃时的内存镜像,包含寄存器、栈、堆等状态。配合 GDB 可精确定位崩溃位置。

启用 Core Dump

# 临时启用(当前 shell)
ulimit -c unlimited

# 永久启用(写入 ~/.bashrc)
echo "ulimit -c unlimited" >> ~/.bashrc
source ~/.bashrc

# 查看 core 文件命名模式
cat /proc/sys/kernel/core_pattern
# 典型输出:core.%p (core.进程ID)

实战演示

1. 测试代码 gdb_test.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(const int argc, const char *argv[]) {
    char *ptr = NULL;
    *ptr = '\n'; // 故意解引空指针
    return 0;
}

2. 编译并运行

gcc gdb_test.c -o gdb_test -g  # 必须加 -g 保留调试符号
./gdb_test
# 输出:Segmentation fault (core dumped)
# 生成 core.5521(进程号)

3. GDB 加载 Core 分析

gdb gdb_test -c core.5521
# 输出关键信息:
# Core was generated by `gdb_test'.
# Program terminated with signal 11, Segmentation fault.
# #0  0x000000000040048b in main (argc=1, argv=0x7fff00c0b438) at gdb_test.c:18
# 18      *ptr='\n';

GDB 常用调试命令

生产环境最佳实践

  1. 编译保留符号:Release 版也加 -g,配合 strip 分离符号文件
  2. Core 文件管理:设置固定目录、限制大小、自动清理
  3. 自动化分析:CI 集成 gdb -batch -ex bt 生成崩溃报告
  4. 配合 Sanitizer:-fsanitize=address 可捕获更多内存错误

常见崩溃类型速查

命令作用
bt / backtrace查看调用栈
frame N切换到第 N 栈帧
info locals查看局部变量值
info args查看函数参数
print expr打印表达式值
list显示源码上下文
信号名称典型原因
SIGSEGV (11)Segmentation fault空指针、越界、use-after-free
SIGABRT (6)Abortassert 失败、malloc 错误、std::terminate
SIGFPE (8)Floating point exception除零、整数溢出
SIGILL (4)Illegal instruction栈溢出、指令损坏、CPU 不支持指令集
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved