【DevOps】Linux的core与gdb - hippowc/hippowc.github.io GitHub Wiki

关于core

对于linux系统,当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成“核心转储”)。我们可以认为 core dump 是“内存快照”,但实际上,除了内存信息之外,还有些关键的程序运行状态也会同时 dump 下来,例如寄存器信息(包括程序指针、栈指针等)、内存管理信息、其他处理器和操作系统状态和信息。

core文件大小一般为程序崩溃时,内存的大小

造成 coredump 的常见原因

  • 内存访问越界
  • 多线程程序使用了线程不安全的函数
  • 多线程读写的数据未加锁保护
  • 非法指针
  • 堆栈溢出

开启core dump

  • 在终端中输入命令 ulimit -c ,输出的结果为 0,说明默认是关闭 core dump 的,即当程序异常终止时,也不会生成 core dump 文件。

查看core文件

  • gdb program core 来查看 core 文件,其中 program 为可执行程序名,core 为生成的 core 文件名。
  • 使用 bt/where 来查看错误堆栈信息
    • 会打印出堆栈信息,其中 #N 代表栈序号
  • f N 切换到序号为N的栈上下文
  • p <变量名> 打印变量信息
  • info args 获取当前函数的入参
  • info locals 获取当前函数局部变量的信息
⚠️ **GitHub.com Fallback** ⚠️