如何调试程序执行后出现的段错误及查找Red Hat 7核心转储文件
程序退出阶段段错误排查及Red Hat 7核心转储文件位置
Red Hat 7核心转储文件的位置与生成检查
- 默认情况下,核心转储文件
core会生成在程序运行的当前工作目录。如果找不到,按以下步骤排查:- 检查核心转储限制:执行
ulimit -c,若输出为0说明系统禁用了核心转储。临时开启可执行ulimit -c unlimited(仅当前终端会话有效);永久开启需编辑/etc/security/limits.conf,添加行* soft core unlimited,之后重新登录系统。 - 查看自定义存储路径:执行
sysctl kernel.core_pattern,若输出不是默认的core(比如/var/core/core.%e.%p.%t),则核心文件会生成在指定路径下(示例中为/var/core/)。修改路径可编辑/etc/sysctl.conf,添加或修改kernel.core_pattern = /your/custom/path/core,执行sysctl -p使配置生效。 - 验证目录权限:确保程序运行用户对目标存储目录有写权限,无权限将无法生成核心文件。
- 检查核心转储限制:执行
退出阶段段错误的排查方向
这种在程序输出"Successfully finished."后触发的段错误,几乎都是全局对象析构或atexit注册的回调函数中存在内存操作问题,比如重复释放内存、访问已释放的内存块、数组越界等。
排查步骤:
- 若已获取核心转储文件,用
gdb ./run_program core加载,执行bt命令打印调用栈,直接定位出错的函数和代码行。 - 若暂时无法生成核心文件,直接用
gdb ./run_program启动程序,输入run执行,触发段错误后立即执行bt查看调用栈。 - 重点检查全局变量的析构逻辑、
atexit注册函数中的内存释放代码,确认是否存在野指针、重复free等问题。
内容的提问来源于stack exchange,提问作者didjek
相关产品推荐
相关产品推荐

