gdb调试产生code文件以及遇到的“file format not recognized”问题解决

一、调试 core 文件的配置

1.1 开启core文件 —— ulimit

有时候,服务器程序运行一段时间后会突然崩溃,这并不是我们希望看到的,需要
解决这个问题。只要程序在崩溃的时候有 core 文件产生,就可以使用这个 core 文件
来定位崩溃的原因。当然,Linux 系统默认是不开启程序崩溃产生 core 文件这一机制
的,我们可以使用 ulimit -c 命令来查看系统是否开启了这一机制。发现 core file size 那一行默认是 0,表示关闭生成 core 文件。
在这里插入图片描述
如何开启
1)使用 ulimit -c unlimited(unlimited 是 -c 选项值)直接修改成不限制大小。
2)然后执行source /etc/profile即可立即生效。
3)再次查看 ulimit -c,结果为unlimited表示修改成功。
在这里插入图片描述

1.2 设置core文件生成地址

系统默认 corefile 是生成在程序的执行目录下或者程序启动调用了 chdir 之后的目录。我们可以通过设置生成 corefile 的格式来控制它,让其生成在固定的目录下
1)打开/etc/sysctl.conf

sudo vim /etc/sysctl.conf

2)在文件最后,写入 corefile 文件生成的目录

kernel.core_pattern=/home/zxm/codedump/core_%e_%p_%t

在这里插入图片描述
%e 所dump的文件名
%p 所dump的进程PID
%t 转储时刻(由1970年1月1日起计的秒数)

3)执行生效

sudo sysctl -p /etc/sysctl.conf

4)使用 cat 去查看路径是否生效

cat /proc/sys/kernel/core_pattern

在这里插入图片描述

1.3 测试

#include <stdio.h>

int main(void)
{
    printf("hello world! dump core for set value to NULL pointer/n");
    *(char *)0 = 0;
    return 0;
}

1)编译运行

gcc -g -o core_dump core_dump.c
./core_dump

结果是Segmentation fault

2)到/home/zxm/codedump,输入ll查看
在这里插入图片描述
3)有core文件,使用 gdb 进行调试。从结果看,提示出错位置在第6行

gdb ./core_dump /home/zxm/codedump/core_core_dump_2369_1689412339

在这里插入图片描述

1.4 无法产生code文件和file format not recognized报错

1)没有产生code文件
一开始调试的时候,并没设置路径。因为默认是程序运行的目录下,但是执行后没有产生。
在这里插入图片描述

2)file format not recognized报错
后面,设置的路径是/home/zxm/share/codedump,share是我的共享文件夹。这个时候报错

"/home/zxm/share/coredump/core_core_dump_2186" is not a core dump: file format not recognized

在这里插入图片描述
检查一下coredump,发现生成的code文件是0。那就是先前ulimit -c unlimited没设置成功。
在这里插入图片描述
3)解决办法
最后解决方法:不要把coredump创建在自己共享文件夹下。我这边修改到/home/zxm/codedump,再运行一次,就ok了;
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲谈社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值