Linux下C/C++服务端崩溃排查手册
本文是Linux下C/C++服务端崩溃排查(gdb调试)操作手册,适用于gRPC/AI推理等服务端程序,遇到段错误、崩溃、莫名退出等问题时可直接参考。
Linux下C/C++服务端崩溃排查手册(gdb调试法)
适用场景
- 服务端程序(如gRPC/AI推理/SDK集成等)运行时崩溃、段错误(Segmentation fault)、core dumped
- 程序无明显报错但进程异常退出
- 需要定位C/C++后端的崩溃原因
步骤一:准备调试环境
-
确保已安装gdb
which gdb # 若未安装 sudo apt install gdb
-
建议编译时加上调试信息(-g)
- CMake项目可加:
set(CMAKE_BUILD_TYPE Debug)
- 或手动加:
-g -O0
- CMake项目可加:
步骤二:用gdb启动服务端
-
进入服务端可执行文件所在目录
cd /path/to/your/server
-
用gdb启动服务端
gdb ./FaceRecognitionGRPCServer
-
在gdb提示符下输入
run --address localhost:50051 --model-path ./test_res/ # 按实际参数填写
步骤三:复现崩溃
- 保持gdb窗口开启,不要退出
- 用客户端(如pclient.py)多次请求服务端,操作直至服务端崩溃或复现问题
步骤四:获取崩溃调用栈
- 服务端崩溃后,gdb会自动停在出错位置
- 在gdb中输入
或bt
backtrace
- 复制终端输出的调用栈信息
步骤五:分析和保存结果
- 将调用栈(bt)结果保存,发给开发者或用于自己分析
- 重点关注最上方的函数(#0、#1、#2),通常是出错点
- 若涉及第三方库(如libInspireFace.so、libopencv等),可结合源码和参数进一步定位
常见补充命令
- 查看源码行号(需有调试信息):
list
- 查看变量值:
print 变量名
- 继续运行:
continue
- 退出gdb:
quit
示例
gdb ./FaceRecognitionGRPCServer
(gdb) run --address localhost:50051 --model-path ./test_res/
# 用客户端多次请求,服务崩溃
(gdb) bt
#0 0x00007ffff79ae42e in MNNSamplerC3Bilinear(...) from libInspireFace.so
#1 ...
#2 ...
#N main ...
常见问题与建议
- 没有调试信息:调用栈只有地址无函数名,建议重新编译加
-g
- core文件分析:如有core文件,可用
gdb ./FaceRecognitionGRPCServer core
- 多线程程序:可用
thread apply all bt
查看所有线程栈
总结
- 用gdb启动服务端,run带参数
- 客户端复现崩溃
- gdb中输入
bt
获取调用栈 - 保存/分析调用栈,定位问题