一篇笔记, 也是备忘
官方文档: https://docs.sentry.io/platforms/native/guides/qt/
crashpad编码的坑
crashpad的源代码全是UTF-8 without BOM
编译的时候一串的 C4819 该文件包含不能在当前代码页中表示的字符
满屏飘红
咱这里有cygwin的zsh环境所以简单粗暴批量加BOM
# for zsh
setopt no_nomatch
setopt nullglob
# for bash
shopt -s nullglob
# the real job
for f in *.{h,cc,c,cpp}; do sed -i '1s/^\(\xef\xbb\xbf\)\?/\xef\xbb\xbf/' $f; done
Qt目录识别
设置SENTRY_INTEGRATION_QT=YES后手动在CMAKE_PREFIX_PATH添加qt的目录
官方文档说的是安装目录
但实际上需要设置为where/qt/installed/at/lib/cmake/Qt5
才能正确识别
拖着个crashpad程序
编译出来发现还需要带着crashpad_handler一起发布才能抓minidump
虽然也可以在程序里初始化sentry之前把crashpad释放到临时目录之类的
但是实在太不优雅了 (摔
使用 SENTRY_BACKEND=breakpad
, 优雅又干净
注: 进程内异常捕获有健壮性问题, 但….又不是不能用.jpg
crashpad转码白整了 (悲
内嵌sentry到程序内
设置 SENTRY_BUILD_SHARED_LIBS=NO
编译静态库而不是dll
使用时需要在导入header之前做额外工作
#define SENTRY_BUILD_STATIC 1
#include <sentry.h>
太不优雅, 修改sentry.h把这个define放到文件头去
最终命令行
set CMAKE_PREFIX_PATH=E:/Applications/Qt/static-5.12/lib/cmake/Qt5
cmake -B build ^
-D SENTRY_BACKEND=breakpad ^
-D SENTRY_BUILD_EXAMPLES=NO ^
-D SENTRY_BUILD_SHARED_LIBS=NO ^
-D SENTRY_BUILD_TESTS=NO ^
-D SENTRY_INTEGRATION_QT=YES ^
-S .
cmake --build build --config Release --parallel
上一篇
下一篇