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