core dump
core dump
当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中(core文件),这种行为就叫做 Core Dump 或者叫做 ‘核心转储’,利用 coredump 可以帮助我们快速定位程序崩溃位置
ulimit -c 查看是否开启,如果输出为
0
,则没有开启。需要执行 ulimit -c unlimited 开启core dump功能。开启后执行ulimit -c输出unlimited在配置文件中设置core文件的名称和生成路径。没有进行设置的话,默认生成的core文件不带其它任何扩展名称,全部命名为core。新的core文件生成将覆盖原来的core文件 。
用gdb同时调试运行程序和相应的core文件,可以复现程序崩溃时的场景,定位到具体程序崩溃的位置,且能看到具体的错误,分析前后的变量,找出问题的原因。
基本GDB命令
为了定位问题,常常需要进行单步跟踪,设置断点之类的操作。
下边列出了GDB一些常用的操作。
- 启动程序:run
- 设置断点:b 行号|函数名
- 删除断点:delete 断点编号
- 禁用断点:disable 断点编号
- 启用断点:enable 断点编号
- 单步跟踪:next (简写 n)
- 单步跟踪:step (简写 s)
- 打印变量:print 变量名字 (简写p)
- 设置变量:set var=value
- 查看变量类型:ptype var
- 顺序执行到结束:cont
- 顺序执行到某一行: util lineno
- 打印堆栈信息:bt