0

0

C++怎么生成core dump_C++故障排查教程【诊断】

尼克

尼克

发布时间:2026-02-26 13:05:07

|

102人浏览过

|

来源于php中文网

原创

core dump未生成主因是三项配置未调优:ulimit -c 非零、/proc/sys/kernel/core_pattern 路径有效且可写、运行目录有写权限及磁盘空间充足;systemd服务需显式设limitcore=infinity。

c++怎么生成core dump_c++故障排查教程【诊断】

core dump 为什么没生成?检查这三项配置

Linux 下 C++ 程序崩溃不产生 core 文件,90% 是因为系统级限制没放开。不是代码问题,是环境没配对。

  • ulimit -c 必须设为非零值(如 ulimit -c unlimited),否则内核直接丢弃 core;临时生效,建议加到 ~/.bashrc 或启动脚本里
  • /proc/sys/kernel/core_pattern 决定 core 文件写哪——默认可能指向 pipe 或空路径;用 cat /proc/sys/kernel/core_pattern 看一眼,想存当前目录就设成 ./core.%e.%p
  • 程序运行目录需有写权限,且磁盘不能满;如果用 systemd 启动,它会重置 ulimit,得在 service 文件里显式加 LimitCORE=infinity

gdb 加载 core dump 的正确姿势

光有 core 文件不够,gdb 必须用**编译时的原始可执行文件**加载,否则符号全丢,堆栈全是 ??

  • 确认可执行文件没被 strip 过:file ./myapp 输出里含 not stripped 才行;若已 strip,只能靠带调试信息的版本(如 myapp.debug)配合 set debug-file-directory
  • 加载命令就是 gdb ./myapp core.12345,别漏掉可执行文件路径;进 gdb 后立刻输 bt,看第一帧是不是你的函数
  • 如果 bt 显示 no stack 或地址乱跳,大概率是 ASLR 干扰——临时关掉:echo 0 | sudo tee /proc/sys/kernel/randomize_va_space(仅调试用)

signal(SIGSEGV, handler) 会阻止 core dump 吗?

会,但只在 handler 里没调 abort()raise(SIGSEGV) 时才真阻止。默认行为被覆盖后,得手动补上。

企奶奶
企奶奶

一款专注于企业信息查询的智能大模型,企奶奶查企业,像聊天一样简单。

下载
  • 注册自定义信号处理函数后,内核不再自动产生 core,除非你在 handler 里显式调用 abort()raise(SIGABRT)exit(128 + SIGSEGV)
  • 更稳妥的做法:handler 里记录日志 + 调 signal(SIGSEGV, SIG_DFL)raise(SIGSEGV),把控制权交还给默认行为
  • 注意:sigactionsignal 更可靠,尤其涉及 SA_RESETHANDSA_NODEFER 标志位时

core dump 太大?按需裁剪而不是关掉

动不动几个 GB 的 core 不是必须接受的,Linux 提供了精细控制,关键在 /proc/[pid]/coredump_filter

立即学习C++免费学习笔记(深入)”;

  • 默认值 0x33 包含私有匿名映射和 ELF 文件映射,通常就足够定位问题;若只想保留堆栈和寄存器,设成 0x01(仅私有匿名区)
  • 修改方式:echo 0x01 > /proc/self/coredump_filter(进程启动前)或写入对应 pid 目录(需权限)
  • 注意:此设置只影响后续生成的 core,不影响已存在的;容器环境可能被 seccomp 或 cgroup 限制,得检查 docker run --ulimit core=-1:-1

真正麻烦的是多线程下信号触发时机和栈帧错位,这时候 core 里看到的不是崩溃点,而是 signal delivery 的中间状态——得结合 info threadsthread apply all bt 全局看。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

425

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

597

2023.08.10

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

425

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

597

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

721

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

371

2025.12.24

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

27

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

25

2026.01.21

batoto漫画官网入口与网页版访问指南
batoto漫画官网入口与网页版访问指南

本专题系统整理batoto漫画官方网站最新可用入口,涵盖最新官网地址、网页版登录页面及防走失访问方式说明,帮助用户快速找到batoto漫画官方平台,稳定在线阅读各类漫画内容。

331

2026.02.25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 10.2万人学习

C 教程
C 教程

共75课时 | 5万人学习

C++教程
C++教程

共115课时 | 19.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号