Appearance
crash/ —— 崩溃排查
进程崩了(SIGSEGV/SIGABRT/死锁/内存越界)怎么办?本目录 7 篇,从 core dump 还原现场,到用 ASan/TSan/Valgrind 提前抓到 bug。
全局地图见 ../overview.md;可跑的崩溃信号 demo 见 ../demos/crash-signals/。
core dump 分析(核心两篇)
- core-dump.md —— core dump 机制 + GDB 全流程:开启 core、
coredumpctl、GDB 加载、bt/frame/info registers还原现场 - core-dump-performance.md —— core dump 的性能开销:什么时候不适合开、core 文件大小、
coredump_filter控制内容
信号与崩溃根因
- signals.md —— 导致 crash 的信号及根因:SIGSEGV(空指针/野指针/栈溢出/写只读段)、SIGABRT(double free/assert/未捕获异常)、SIGFPE(除零)、SIGILL(非法指令)、SIGBUS(总线错误)。每种信号的典型代码模式 + 怎么从退出码/
dmesg/GDB 定位 - double-free.md —— double free 为什么会 crash:glibc ptmalloc 空闲链表不变量 → SIGABRT;C++ 中裸指针/浅拷贝/异常路径/递归锁/多线程无锁等触发模式,配 ASan 抓取
错误检测工具(崩之前就抓到)
- asan.md —— AddressSanitizer:编译器插桩检测内存错误(越界/use-after-free/double-free/内存泄漏),~2x 慢
- tsan.md —— ThreadSanitizer:检测 data race,~5-15x 慢
- valgrind.md —— Valgrind(Memcheck):无需重编译的二进制级内存检测,~10-50x 慢。三种工具的选型对比
生产环境符号分离
- symbol-separation.md —— 生产环境符号分离:debuginfo 分离、strip、
eu-unstrip/debuginfo-install、如何用分离的符号分析 core
一句话:崩溃排查两条路——事后分析用 core dump(core-dump.md),事前预防用 ASan/TSan/Valgrind(asan.md/tsan.md/valgrind.md)。先读 signals.md 认识每种信号,再按需深入。