如何为 Qt 应用程序构建 crashpad

How to build crashpad for Qt application

我正在开发 Qt 应用程序,我想使用 crashpad 来报告崩溃。我已经下载了源代码并构建了它们。

现在我想 link 将那些静态地添加到我的应用程序中。

当我转到 out 文件夹时,我看到很多 .a 文件。我应该选择哪一个?

> find ./out -name *.a 
./obj/handler/libhandler.a
./obj/snapshot/libsnapshot.a
./obj/snapshot/libtest_support.a
./obj/test/libtest.a
./obj/test/libgtest_main.a
./obj/test/libgmock_main.a
./obj/util/libutil.a
./obj/third_party/mini_chromium/mini_chromium/base/libbase.a
./obj/third_party/gtest/libgtest_main.a
./obj/third_party/gtest/libgtest.a
./obj/third_party/gtest/libgmock.a
./obj/third_party/gtest/libgmock_main.a
./obj/minidump/libminidump.a
./obj/minidump/libtest_support.a
./obj/client/libclient.a

我也使用这个命令构建了它:

build/gyp_crashpad.py -Dmac_deployment_target=10.12

不知道要不要加一些参数

有人可以帮忙吗?

提前致谢

也许可以在您的代码中输入:

sys._excepthook = sys.excepthook

def my_exception_hook(exctype, value, traceback):
    # Print the error and traceback
    print(exctype, value, traceback)
    # Call the normal Exception hook after
    sys._excepthook(exctype, value, traceback)
    sys.exit(1)
# Set the exception hook to our wrapping function
sys.excepthook = my_exception_hook

此外,导入系统。此代码打印错误并报告它。

通过 gnninja 构建 Crashpad,其中 gn 生成构建配置,ninja 进行实际构建。

要使 macOS Qt 应用程序生成小型转储并将它们上传到远程服务器,需要将其链接到 Crashpad 库 libcommon.alibclient.alibutil.alibbase.a, mig_output.a:

# Crashpad libraries
LIBS += -L$$PWD/Crashpad/Libraries/MacOS/$$ARCH -lcommon
LIBS += -L$$PWD/Crashpad/Libraries/MacOS/$$ARCH -lclient
LIBS += -L$$PWD/Crashpad/Libraries/MacOS/$$ARCH -lbase
LIBS += -L$$PWD/Crashpad/Libraries/MacOS/$$ARCH -lutil
LIBS += -L$$PWD/Crashpad/Libraries/MacOS/$$ARCH -lmig_output

该应用程序还需要与系统库 bsm 以及框架 AppKitSecurity:

链接
# System libraries
LIBS += -L/usr/lib/ -lbsm
LIBS += -framework AppKit
LIBS += -framework Security

此外,您需要将 crashpad_handler 与您的应用程序打包在一起,并确保它在运行时可用。

可以找到有关构建 Crashpad 的更多信息 here

可以找到与 Crashpad 集成的示例 macOS Qt 应用程序 here