c编译段错误 (core dumped) gdb调试

发布时间 2023-10-26 15:50:25作者: 悟透

说明环境

ubuntu 18.04


一、开启 生成coredump文件

ulimit  -c  unlimited

二、创建存储 coredump 文件地方

cd ~
mkdir coredump_files
echo '/home/${USER}/coredump_files/%t-%e-%p-%c.core' > /proc/sys/kernel/core_pattern

将更改core文件生成路径,自动放在这个/home/${USER}/coredump_files文件夹里。

%p - insert pid into filename 添加pid
%u - insert current uid into filename 添加当前uid
%g - insert current gid into filename 添加当前gid
%s - insert signal that caused the coredump into the filename 添加导致产生core的信号
%t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间
%h - insert hostname where the coredump happened into filename 添加主机名
%e - insert coredumping executable name into filename 添加程序名


三、提示权限不够:

1.用 sudu 提示权限不够

sudo echo '/home/${USER}/coredump_files/%t-%e-%p-%c.core' > /proc/sys/kernel/core_pattern

2.进入 root 用户执行下面两条命令

su
echo '/home/${USER}/coredump_files/%t-%e-%p-%c.core' > /proc/sys/kernel/core_pattern

3.如果不行,执行下面命令修改root密码(修改过略过此命令)

su passwd

输入要设置的密码。
设置好密码重新执行第2步。


四、将执行编译时 stage1flex 二进制文件,复制到 coredump_files 文件夹里,

方便使用(指定二进制绝对路径也可以)下面是make 编译 flex-2.6.4 时报错.

./stage1flex   -o stage1scan.c ./scan.l
Makefile:1696: recipe for target 'stage1scan.c' failed
make[2]: *** [stage1scan.c] 段错误 (core dumped)
make[2]: 离开目录“/home/qt/byd-nidps-3lib/flex-2.6.4/src”
Makefile:546: recipe for target 'all' failed
make[1]: *** [all] Error 2
make[1]: 离开目录“/home/qt/byd-nidps-3lib/flex-2.6.4/src”
Makefile:533: recipe for target 'all-recursive' failed
make: *** [all-recursive] Error 1

五、使用命令调试:

cd /home/${USER}/coredump_files/
gdb -c 1698303384-stage1flex-27879-18446744073709551615.core stage1flex
bt

输入bt 后可以看到绿色箭头处,提示源码 main.c文件第 976 行出问题
image

1698303384-stage1flex-27879-18446744073709551615.core 文件要改成你实际文件


之后就可以去修改源码中的问题了




免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。




参考、来源:
https://blog.csdn.net/weixin_40877924/article/details/108762118
https://blog.csdn.net/qq_43740943/article/details/105476108