qBreakpad 介绍
qBreakpad is Qt library to use google-breakpad crash reporting facilities (and using it conviniently). Supports
Windows (but crash dump decoding will not work with MinGW compiler)
Linux
MacOS X
qBreakpad 如何使用:
- 下载代码
git clone --recursive https://github.com/buzzySmile/qBreakpad.git
cd qBreakpad/third_party
git clone https://github.com/google/breakpad
git clone https://github.com/ithaibo/linux-syscal-support
rm lss
mv linux-syscal-support lss
- 静态编译qBreakpad 用qtcreator打开qBreakpad目录的qBreakpad.pro文件,根据需求编译debug版本或者release版本,一般都是需要debug版本。编译完成后,检查以下文件是否存:
qBreakpad\third_party\breakpad\src\tools\windows\binaries\dump_syms.exe
qBreakpad\hanlder\qBreakpad.lib
- 把qBreadpad集成到本地工程 修改本地工程的pro文件,如下(根据实际情况修改)
include($$PWD/qBreakpad/qBreakpad.pri)
QMAKE_LIBDIR += $$PWD/qBreakpad/handler
LIBS += -lqBreakpad
修改本地工程的main.cpp,也可以在别处。
#include <QBreakpadHandler.h>
....
int main(int argc, char *argv[])
{
....
QBreakpadInstance.setDumpPath(QLatin1String("crashes"));
....
}
如何分析dmp文件:
- 生成symbols
./dump_syms.exe ./testApp.exe > testApp.sym
该命令可能出错
CoCreateInstance CLSID_DiaSource {E6756135-1E65-4D17-8576-610761398C3C} failed (msdia*.dll unregistered?)
此为系统未注册 msdia*.dll
文件。从 Visual Studio
的安装目录中可以搜索到,在目录 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\
下存在 msdia120.dll
和 msdia140.dll
文件。注册一下 msdia140.dll
即可。
按下windows键,输入cmd,鼠标右键点击 命令提示符 以管理员方式运行,然后执行如下命令注册 msdia140.dll:
regsvr32 "D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\msdia140.dll"
- 创建对应的目录 看到dump文件信息
head -n1 testapp.sym
输出
MODULE windows x86_64 EC770504227A41069022FB27B31345474 testApp.pdb
创建目录并移动文件
mkdir -p ./symbols/testApp.pdb/EC770504227A41069022FB27B31345474
mv testapp.sym ./symbols/testApp.pdb/EC770504227A41069022FB27B31345474
注意如果动态库也需要调试,那么按照此步骤创建库的sym并放到对应的目录。
- 查看dmp文件
./minidump_stackwalk.exe xxx.dmp ./symbols >> 1.txt
minidump_stackwalk.exe可以从安卓开发工具获取到。
Comments