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

一、调试 core 文件的配置

1.1 开启core文件 —— ulimit

有时候,服务器程序运行一段时间后会突然崩溃,这并不是我们希望看到的,需要
解决这个问题。只要程序在崩溃的时候有 core 文件产生,就可以使用这个 core 文件
来定位崩溃的原因。当然,Linux 系统默认是不开启程序崩溃产生 core 文件这一机制
的,我们可以使用 ulimit -c 命令来查看系统是否开启了这一机制。发现 core file size 那一行默认是 0,表示关闭生成 core 文件。
gdb调试产生code文件以及遇到的“file format not recognized”问题解决_第1张图片
如何开启
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

gdb调试产生code文件以及遇到的“file format not recognized”问题解决_第2张图片
%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 

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查看
gdb调试产生code文件以及遇到的“file format not recognized”问题解决_第3张图片
3)有core文件,使用 gdb 进行调试。从结果看,提示出错位置在第6行

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

gdb调试产生code文件以及遇到的“file format not recognized”问题解决_第4张图片

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

1)没有产生code文件
一开始调试的时候,并没设置路径。因为默认是程序运行的目录下,但是执行后没有产生。
gdb调试产生code文件以及遇到的“file format not recognized”问题解决_第5张图片

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

gdb调试产生code文件以及遇到的“file format not recognized”问题解决_第6张图片
检查一下coredump,发现生成的code文件是0。那就是先前ulimit -c unlimited没设置成功。
gdb调试产生code文件以及遇到的“file format not recognized”问题解决_第7张图片
3)解决办法
最后解决方法:不要把coredump创建在自己共享文件夹下。我这边修改到/home/zxm/codedump,再运行一次,就ok了;
gdb调试产生code文件以及遇到的“file format not recognized”问题解决_第8张图片
gdb调试产生code文件以及遇到的“file format not recognized”问题解决_第9张图片

你可能感兴趣的:(Linux环境编程初阶,linux,C/C++,调试)