Linux下C/C++服务端崩溃排查手册

发布于:2025-07-31 ⋅ 阅读:(20) ⋅ 点赞:(0)

本文是Linux下C/C++服务端崩溃排查(gdb调试)操作手册,适用于gRPC/AI推理等服务端程序,遇到段错误、崩溃、莫名退出等问题时可直接参考。


Linux下C/C++服务端崩溃排查手册(gdb调试法)

适用场景

  • 服务端程序(如gRPC/AI推理/SDK集成等)运行时崩溃、段错误(Segmentation fault)、core dumped
  • 程序无明显报错但进程异常退出
  • 需要定位C/C++后端的崩溃原因

步骤一:准备调试环境

  1. 确保已安装gdb

    which gdb
    # 若未安装
    sudo apt install gdb
    
  2. 建议编译时加上调试信息(-g)

    • CMake项目可加:set(CMAKE_BUILD_TYPE Debug)
    • 或手动加:-g -O0

步骤二:用gdb启动服务端

  1. 进入服务端可执行文件所在目录

    cd /path/to/your/server
    
  2. 用gdb启动服务端

    gdb ./FaceRecognitionGRPCServer
    
  3. 在gdb提示符下输入

    run --address localhost:50051 --model-path ./test_res/  # 按实际参数填写
    

步骤三:复现崩溃

  1. 保持gdb窗口开启,不要退出
  2. 用客户端(如pclient.py)多次请求服务端,操作直至服务端崩溃或复现问题

步骤四:获取崩溃调用栈

  1. 服务端崩溃后,gdb会自动停在出错位置
  2. 在gdb中输入
    bt
    
    backtrace
    
  3. 复制终端输出的调用栈信息

步骤五:分析和保存结果

  • 将调用栈(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查看所有线程栈

总结

  1. 用gdb启动服务端,run带参数
  2. 客户端复现崩溃
  3. gdb中输入bt获取调用栈
  4. 保存/分析调用栈,定位问题

网站公告

今日签到

点亮在社区的每一天
去签到