【DevOps】Linux的core与gdb - hippowc/hippowc.github.io GitHub Wiki
对于linux系统,当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成“核心转储”)。我们可以认为 core dump 是“内存快照”,但实际上,除了内存信息之外,还有些关键的程序运行状态也会同时 dump 下来,例如寄存器信息(包括程序指针、栈指针等)、内存管理信息、其他处理器和操作系统状态和信息。
core文件大小一般为程序崩溃时,内存的大小
- 内存访问越界
- 多线程程序使用了线程不安全的函数
- 多线程读写的数据未加锁保护
- 非法指针
- 堆栈溢出
- 在终端中输入命令 ulimit -c ,输出的结果为 0,说明默认是关闭 core dump 的,即当程序异常终止时,也不会生成 core dump 文件。
- gdb program core 来查看 core 文件,其中 program 为可执行程序名,core 为生成的 core 文件名。
- 使用 bt/where 来查看错误堆栈信息
- 会打印出堆栈信息,其中 #N 代表栈序号
- f N 切换到序号为N的栈上下文
- p <变量名> 打印变量信息
- info args 获取当前函数的入参
- info locals 获取当前函数局部变量的信息