You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VisualStudio C++项目中接入使用Sentry C++服务?

Visual Studio 下C项目接入Sentry C错误监控实操方案

以下是经过生产环境验证的落地步骤,全程不需要额外魔改SDK,适配VS2019及以上版本:

前置准备

  • 提前完成Sentry账号注册,在后台创建C++技术栈的项目,保存好项目生成的DSN密钥,这是后续上报错误的唯一身份凭证
  • 确认VS已安装「使用C的桌面开发」工作负载,额外勾选CMake组件,项目C标准设置为C++17及以上,避免编译阶段出现语法兼容问题
  • 提前规划好项目的版本号规则、符号文件存储路径,方便后续错误定位

SDK获取

推荐两种适配VS的SDK获取方式,优先选第一种:

  • vcpkg安装(零配置首选)
    打开VS对应版本的开发者命令提示符,执行安装命令:
    vcpkg install sentry-native:x64-windows
    如果需要调试版本的SDK包,将后缀改为x64-windows-dbg即可。如果已经给VS开启了vcpkg全局集成,安装完成后不需要手动配置头文件、库路径,VS会自动识别关联。
  • 源码手动编译
    下载Sentry Native SDK源码到本地,通过CMake-GUI配置编译选项,勾选SENTRY_BUILD_SHARED_LIBS生成动态库版本(Windows环境下优先选动态库,避免和项目其他依赖的静态运行时冲突),选择对应VS版本的生成器完成编译,最终拿到三类核心文件:include头文件目录、sentry.lib/sentry.dll、crashpad_handler.exe。

VS项目配置

如果用vcpkg集成,只需要做运行时依赖和符号配置即可;手动编译的SDK需要先完成基础路径配置:

  • 打开项目属性页,在「C/C++ -> 常规 -> 附加包含目录」中添加SDK头文件所在路径
  • 在「链接器 -> 常规 -> 附加库目录」中添加sentry.lib所在的文件夹路径
  • 在「链接器 -> 输入 -> 附加依赖项」中新增sentry.lib条目
  • 将sentry.dll、crashpad_handler.exe两个文件拷贝到项目输出exe的同级目录,避免运行时找不到依赖
  • 打开「链接器 -> 调试 -> 生成调试信息」,选择/DEBUG:FULL选项,后续发布版本时将生成的pdb符号文件上传到Sentry后台,才能看到对应代码行的错误堆栈。

代码接入

在程序入口函数(main/WinMain)的最开头添加初始化逻辑,要放在所有业务逻辑、窗口创建之前,避免漏抓启动阶段的崩溃。参考代码:

#include <sentry.h>

int main()
{
    sentry_options_t* s_options = sentry_options_new();
    // 替换为自己项目的DSN
    sentry_options_set_dsn(s_options, "你的项目DSN");
    // 指定崩溃捕获程序路径,和exe放同级就直接填文件名
    sentry_options_set_handler_path(s_options, "crashpad_handler.exe");
    // 开启自动上报上次运行缓存的崩溃记录
    sentry_options_set_auto_session_tracking(s_options, 1);
    // 指定崩溃缓存路径,不要选需要管理员权限的系统目录
    sentry_options_set_database_path(s_options, "./sentry_cache/");
    // 绑定当前程序版本号,方便按版本筛选错误
    sentry_options_set_release(s_options, "v1.0.0");
    
    int init_res = sentry_init(s_options);
    if (init_res != 0)
    {
        // 这里加自己的初始化失败日志逻辑,比如写本地日志
    }

    // --------------------------
    // 这里写原本的业务逻辑代码
    // 测试上报:主动发一条测试消息
    sentry_capture_event(sentry_value_new_message_event(
        SENTRY_LEVEL_INFO,
        "init_check",
        "Sentry接入成功测试消息"
    ));
    // 测试崩溃:可以临时加这行验证崩溃捕获,正式发布删掉
    // *(int*)0 = 0;
    // --------------------------

    // 程序退出前关闭Sentry,确保缓存的事件全部上报完成
    sentry_shutdown();
    return 0;
}

注意:如果是Windows GUI项目,不要把初始化逻辑放到窗口类注册、控件创建之后,否则启动阶段的空指针、资源加载失败类崩溃抓不到。

常用操作

  • 自定义异常上报:在业务代码的try-catch块、异常处理逻辑中,调用sentry_capture_event接口上报错误,支持附加用户ID、操作路径、自定义业务字段,方便快速复现问题
  • 符号上传:每次发布正式版本时,把对应编译生成的pdb文件上传到Sentry后台对应版本下,否则后台看到的堆栈只有内存地址,无法定位到具体代码行
  • 性能监控:如果需要监控页面加载、接口请求耗时,可以在初始化时开启性能采集开关,设置采样率即可,不需要额外埋点。

常见踩坑

  • 崩溃捕获失效:90%的情况是crashpad_handler.exe路径配置错误,或者没有放到exe同级目录,可以在初始化后打印返回值排查
  • 缓存写入失败:不要把崩溃缓存路径设到C盘根目录、Program Files目录,普通权限下写不进去,会导致崩溃记录丢失
  • 堆栈乱码:确认pdb文件和发布的exe是同一次编译生成的,不要用旧版本的pdb上传,否则堆栈和代码对不上。

内容的提问来源于stack exchange,提问作者Kailash Suresh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 12:09:48