Skip to content

崩溃 / 内存问题排查与调试(Debugging)专题 ​

小林「C++问题排查」组与 HPC/Infra 实际都高频问:线上崩了怎么定位、core dump 里有什么、GDB 怎么用、内存问题怎么排查。它把 memory/leak(泄漏)与这里的崩溃/工具串起来。

问题清单(含答案) ​

1. Linux 下程序崩溃怎么一步步定位?

答案

先看崩溃信号/能否复现,开启 core dump,用 gdb ./prog core 加载后 bt 看调用栈;内存问题再上 ASan/Valgrind。详见 crash-debug.md。

2. core dump 是什么、怎么开启?能拿到什么?

答案

崩溃时的内存快照文件。ulimit -c unlimited 开启;含内存、寄存器、调用栈、变量等现场信息。

3. 拿到 core 用 GDB bt 怎么看崩溃调用栈?

答案

gdb ./prog core 加载,bt(backtrace)打印崩溃点调用栈,frame N 切换帧,info locals 看局部变量。

4. 常见崩溃类型各自什么信号?

答案

SIGSEGV 段错误(非法内存访问)、SIGILL 非法指令、栈溢出(通常 SIGSEGV)、SIGABRT(abort/assert)、double free(glibc 检测后 abort)、OOM(可能 SIGKILL)。

5. 内存问题为什么现场难查?能上哪些工具?

答案

越界/悬垂往往早已发生、崩在别处。ASan(编译插桩、精准定位越界/use-after-free)和 Valgrind(动态分析)在开发期抓。

6. gdb 常用命令?

答案

break/run/bt/frame/info locals/next/step/print/x(看内存)。

7. release(-O2) 下看不了局部变量怎么处理?

答案

加 -fno-omit-frame-pointer 保留帧指针、release 分发包带 -g 符号、或补日志。详见 crash-debug.md。

子文档 ​

文件内容
index.md本总览
crash-debug.md崩溃定位、core dump、GDB 工作流、常见信号
内存泄漏检测/避免:见 memory/leak.md
栈布局/虚拟内存:见 memory/layout.md

糌粑的面经笔记 · VitePress 版