使用场景
当使用之前介绍的addr2line工具无法定位时,如程序崩溃在动态库处,此时就可使用gdb分析core dump文件定位问题。
core dmup
简介
core dump 又叫核心转储,是一个程序运行时的环境一个集合包,包含崩溃时的堆栈信息,是一个二进制文件,无法使用记事本打开,一般会在指定目录下生成一个core文件。core文件仅仅是一个内存映象,主要用来调试。
使用
- 查看开启状态
ulimit -c
0 关闭
unlimited 未限制大小
- 设置单个文件大小
ulimit -c 文件大小
ulimit -c 1024 1024k
ulimit -c unlimited 大小未限制
ulimit -c 0 关闭
- 指定core dump文件的生成路径
系统默认的core文件生成路径是/var/logs,但/var/logs目录并非系统自带的,系统初始安装默认自带的是/var/log,最终导致该系统出现core
dump后并没能生成core文件。指定core dump文件存在/dump/目录下,格式自定义
echo ‘/dump/core-%e-%p-%t’ > /proc/sys/kernel/core_pattern
more /proc/sys/kernel/core_pattern
如果这样还是没有生成core文件,建议不设置路径,选用默认路径为可执行程序相同目录
echo ‘core-%e-%p-%t’ > /proc/sys/kernel/core_pattern
gdb 定位崩溃处
gdb 指令分析core dump文件
gdb格式如下:
gdb [exec file] [core file]
[exec file]表示之前使用gcc编译的程序
[core file]表示之前产生的dump文件
如下图所示崩溃在core_dump.c 文件的第7行
gdb 调试指令
- bt
命令用于获取当前线程的函数调用堆栈信息。
它会显示当前线程中函数调用的序列,从当前位置回溯到程序的入口点。 - disass
反汇编