首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux环境下Crashpad与Qt的集成

Linux环境下Crashpad与Qt的集成
EN

Stack Overflow用户
提问于 2021-07-02 12:51:28
回答 1查看 169关注 0票数 2

我正在尝试将Crashpad集成到Linux上的Qt应用程序中。我正在使用Bugsplat数据库进行测试,我遵循本教程并设法构建了这个“虚拟”应用程序,这应该是使用Qt与Crashpad一起使用的一个例子。

我对文件做了一些小的调整,以修复我的Linux平台的构建,主要是使修改版本变得更容易,并且修复了在应用程序二进制文件旁边创建目录和崩溃板文件。

以下将所有更改作为一个diff文件列出:

代码语言:javascript
复制
diff --git a/Crashpad/Tools/Linux/symbols.sh b/Crashpad/Tools/Linux/symbols.sh
index 095f295..b065438 100644
--- a/Crashpad/Tools/Linux/symbols.sh
+++ b/Crashpad/Tools/Linux/symbols.sh
@@ -3,6 +3,6 @@ symupload="${1}/Crashpad/Tools/Linux/symupload"
 app="${2}/${4}.debug"
 sym="${4}.sym"
 url="https://${3}.bugsplat.com/post/bp/symbol/breakpadsymbols.php?appName=${4}&appVer=${5}"
-
+echo ${url}
 eval "${dump_syms} ${app} > ${sym}"
 eval $"${symupload} \"${sym}\" \"${url}\""
diff --git a/main.cpp b/main.cpp
index db97dd4..b721dc5 100644
--- a/main.cpp
+++ b/main.cpp
@@ -26,7 +26,7 @@ int main(int argc, char *argv[])
 {
     QString dbName = "Fred";
     QString appName = "myQtCrasher";
-    QString appVersion = "1.0";
+    QString appVersion = QString::number(MAJOR_VERSION) + "." + QString::number(MINOR_VERSION);
 
     initializeCrashpad(dbName, appName, appVersion);
 
diff --git a/myQtCrasher.pro b/myQtCrasher.pro
index 3005e41..3bf7a3e 100644
--- a/myQtCrasher.pro
+++ b/myQtCrasher.pro
@@ -15,6 +15,12 @@ DEFINES += QT_DEPRECATED_WARNINGS
 # You can also select to disable deprecated APIs only up to a certain version of Qt.
 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
 
+MAJOR_VERSION = 4
+MINOR_VERSION = 9
+
+DEFINES += MAJOR_VERSION=$$MAJOR_VERSION
+DEFINES += MINOR_VERSION=$$MINOR_VERSION
+
 SOURCES += \
     main.cpp \
     mainwindow.cpp \
@@ -94,7 +100,8 @@ linux {
     LIBS += -L$$PWD/Crashpad/Libraries/Linux/ -lbase
 
     # Copy crashpad_handler to build directory and run dump_syms and symupload
-    QMAKE_POST_LINK += "cp $$PWD/Crashpad/Bin/Linux/crashpad_handler $$OUT_PWD/crashpad"
-    QMAKE_POST_LINK += "&& bash $$PWD/Crashpad/Tools/Linux/symbols.sh $$PWD $$OUT_PWD fred myQtCrasher 1.0 > $$PWD/Crashpad/Tools/Linux/symbols.out 2>&1"
-    QMAKE_POST_LINK += "&& cp $$PWD/Crashpad/attachment.txt $$OUT_PWD/attachment.txt"
+    QMAKE_POST_LINK += "mkdir $$OUT_PWD/crashpad"
+    QMAKE_POST_LINK += "&& cp $$PWD/Crashpad/Bin/Linux/crashpad_handler $$OUT_PWD/crashpad"
+    QMAKE_POST_LINK += "&& bash $$PWD/Crashpad/Tools/Linux/symbols.sh $$PWD $$OUT_PWD fred myQtCrasher $$MAJOR_VERSION"."$$MINOR_VERSION > $$PWD/Crashpad/Tools/Linux/symbols.out 2>&1"
+#    QMAKE_POST_LINK += "&& cp $$PWD/Crashpad/attachment.txt $$OUT_PWD/attachment.txt" #if any attachment is needed
 }

生成myQtCrasher.debug和外部生成的myQtCrasher.sym符号文件。

使用他们的虚拟数据库 (信用卡是fred@bugsplat.com和Flintstone作为密码),我成功地报告了崩溃,但是由于某种原因,这个bug不包含上传的符号。我试图通过将请求发送到dump_syms,然后使用symupload应用程序将它们手动上传到https://fred.bugsplat.com/post/bp/symbol/breakpadsymbols.php?appName=myQtCrasher&appVer=4.9,但没有成功。

symupload应用程序输出为

代码语言:javascript
复制
Failed to open curl lib from binary, use libcurl.so instead
Successfully sent the symbol file.

如何正确上传*.sym并查看崩溃时的堆栈跟踪?

谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-02 13:27:19

我们能够得到这个坠机报告的解析符号。在symupload警告Failed to open curl lib from binary, use libcurl.so instead之后,它说成功地发送了符号文件。我确认符号文件上传正确。

我发现符号文件有两个问题。当minidump_stackwalk在寻找相应的符号时,它需要:

代码语言:javascript
复制
/myQtCrasher-4.9/myQtCrasher/C03D64A46AB29A093459A592482836E50/myQtCrasher.sym

上传到BugSplat的文件是myQtCrasher.debug.sym,sym文件第一行上的模块是myQtCrasher.debug。我将文件名更改为myQtCrasher.sym,模块名更改为myQtCrasher,myQtCrasher堆栈帧的符号显示函数名和行号。

我不确定这些与符号不匹配的问题是否是由于您的脚本更改造成的,但我们的脚本似乎试图设置以下变量:

代码语言:javascript
复制
app="${2}/${4}.debug"
sym="${4}.sym"

因此,脚本要求用户从.debug文件生成sym文件,但是根据相应的可执行文件命名它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68225557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档