core文件的调试
1、什么是core文件?
Core dump 文件是指在程序崩溃或异常结束时,操作系统将程序的内存信息、寄存器状态、堆栈信息等保存到文件中以便进行调试和分析的文件。
内存信息:分为栈内存(Stack Memory)和堆内存(Heap Memory)
寄存器状态:常见的寄存器包括程序计数器(PC)、堆栈指针(SP)、基址寄存器(Base Pointer)、索引寄存器
堆栈信息:堆栈信息特指栈内存的使用情况,包括局部变量、函数调用的参数、返回地址等
2、core文件怎么产生的?
1° 程序发生段错误:
① 访问空指针或者野指针; ② 访问系统保护的内存地址(内核空间地址);③访问只读内存地址;④ 栈溢出(函数无限循环递归);⑤数组越界;⑥ 除零操作;⑦ 访问已经释放的指针;
2° 命令 ulimit -c unlimited,将 core dump 文件的大小限制设置为无限制;
3° core文件生成位置默认为当前工作目录;
3、core文件如何调试?
1° 通过命令gdb ./a.out core.xxxx 进入core文件的gdb;(通过gdb -c core.xxx 进入gdb的话,还需要在gdb中输入file ./a.out 读取符号信息,否则bt显示双问号??)
2° 查看程序崩溃时的堆栈信息:
(gdb) bt
查看程序崩溃时的变量值:
(gdb) p
查看程序崩溃时的寄存器状态:
(gdb) info registers
查看程序崩溃时的汇编代码:
(gdb) disassemble
linux:core文件的产生和调试 - 简书 (jianshu.com)