1、ulimit -c unlimited开启coredump功能
永久修改
(1)/etc/bash.bashrc 添加ulimit -c unlimited
(2)source /etc/bash.bashrc生效最新修改文件
2、设置文件生成位置
sudo bash -c “echo /home/dir/core.%e.%p > /proc/sys/kernel/core_pattern”
%%单个%字符
%p所dump进程的进程ID
%u所dump进程的实际用户ID
%g所dump进程的实际组ID
%s导致本次core dump的信号
%t core dump的时间 (由1970年1月1日计起的秒数)
%h主机名
%e程序文件名
3、GDB调试
(1)编译带调试信息的可执行文件
gcc -g xxx.c -o xxxx
方法一:如果编译未加-g 可以尝试disassemble反汇编,根据汇编语句反推是哪个函数
方法二:
- 同版本编译一个带-g参数的可执行文件
- 创建调试符号文件:objcopy --only-keep-debug my-object my-object.debug(my-object可以是可执行文件也可以是动态链接库)
- strip --strip-debug my-object(此步骤只是学习用,在不想要符号表的时候可以通过此命令去除符号表)
- objcopy --add-gnu-debuglink=my-object.dbg my-object(此步骤只是学习,此处将可执行文件链接到符号表文件)
- gdb my-object core_xxxxxx(加载coredump)
- symbol-file my-object.debug(加载符号表文件)