google breakpad /qbreakpad 在 arm移植
来源:互联网 发布:gtx1050ti 知乎 编辑:程序博客网 时间:2024/06/09 23:46
google breakpad /qbreakpad 在 arm移植
breakpad在arm-linux上移植,集成到qt中生成qbreakpad
参考文档:
Google Breakpad 之一,跨平台crash 处理上报系统简介 http://blog.csdn.net/wpc320/article/details/8290501
Google Breakpad 之二,实战Linux平台本地crash http://blog.csdn.net/wpc320/article/details/8291296
Google Breakpad 之三,实战Windows平台crash http://blog.csdn.net/wpc320/article/details/8291857
Google Breakpad 之四,客户端设计 http://blog.csdn.net/wpc320/article/details/8298524
breakpad移植过程
breakpad源码下载:https://github.com/google/breakpad/tree/6f045df4f0d976ee196221f7dc51dadfd245a738
注意:最新版的google breakpad需要支持C++ 11属性,对应比较老的交叉编译工具,需要下载前几个版本的breakpad才能编译通过,上述地址是google 2013 年commit的一个版本稍加修改即可编译通过
一、修改源码
- 修改src\common\memory.h + 117为:
void *a = sys_mmap(NULL, page_size_ * num_pages, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); #else- void *a = sys_mmap2(NULL, page_size_ * num_pages, PROT_READ | PROT_WRITE,+ void *a = sys_mmap(NULL, page_size_ * num_pages, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); #endif if (a == MAP_FAILED)
- 修改\src\tools\linux\md2core\minidump-2-core.cc +128为:
long tv_sec; /* Seconds */ long tv_usec; /* Microseconds */ } elf_timeval;--typedef struct elf_siginfo { /* Information about signal (unused) */+#if 0+struct elf_siginfo { /* Information about signal (unused) */ int32_t si_signo; /* Signal number */ int32_t si_code; /* Extra code */ int32_t si_errno; /* Errno */-} elf_siginfo;-+};+#endif typedef struct prstatus { /* Information about thread; includes CPU reg*/ elf_siginfo pr_info; /* Info associated with signal */ uint16_t pr_cursig; /* Current signal
- 修改src\common\linux\memory_mapped_file.cc +87为:
#if defined(__x86_64__) void* data = sys_mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0); #else- void* data = sys_mmap2(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0);+ void* data = sys_mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0); #endif sys_close(fd); if (data == MAP_FAILED) {
- 新建src/third_party/lss/linux_syscall_support.h ;文件太大google搜索添加即可
二、编译
在源码目录下
export CC=arm-arago-linux-gnueabi-gccexport CXX=arm-arago-linux-gnueabi-g++./configure --host=arm-arago-linux-gnueabi --prefix=/home/xxx/xxxmake -j4make install
其中 –host为你的交叉编译工具前缀,执行完上述命令可在你的-prefix设置的目录下生成具体的库文件
其实完成上述移植可满足当前需求,我们现在的需求是在qt中使用breakpad,所以还需要移植一个qbreakpad,qbreakpad基于breakpad生成,所以我们可修改qbreakpad源码编译即可
qbreakpad移植
qbreakpad源码下载 : https://github.com/buzzySmile/qBreakpad
qbreakpad是基于breakpad编译生成的库从而集成到qt中
一、qbreakpad介绍
- 具体功能介绍可参考github,我们的需求实在嵌入式qt中使用breakpad,所以将他制作成qt库
- qbreakpad源码结构我们只需要编译handler目录下的工程生成libqbreakpad.so动态库即可,其他的都是他的实例程序和测试
二、qbreakpad源码修改
- 拷贝breakpad src目录及其子目录下的所有的*.h文件到当前目录
- 在qBreakpad-master\handler\QBreakpadHttpUploader.h加入头文件
c
#include <qDebug> 修改qBreakpad-master\handler\handler.pro为以下结构,注意修改启动LIBS链接为上面编译的libbreakpad_client.a文件的路径
TEMPLATE = libTARGET = qBreakpadApplication versionVERSION = 0.4.0CONFIG += warn_on thread exceptions rtti stlQT -= guiQT += core networkLIBS += -L/home/lingfuyi/it7000/pack/qBreakpad-master/handler/ -lbreakpad_clientOBJECTS_DIR = _build/objMOC_DIR = _buildwin32 {DESTDIR = $$OUT_PWD}HEADERS += \ $$PWD/singletone/call_once.h \$$PWD/singletone/singleton.h \ $$PWD/QBreakpadHandler.h \$$PWD/QBreakpadHttpUploader.h \ $$PWD/exception_handler.hSOURCES += \$$PWD/QBreakpadHandler.cpp \ $$PWD/QBreakpadHttpUploader.cpp
修改所有cpp文件对应breakpad头文件路径为你具体的路径
qt版本过低的需要注释掉handler\QBreakpadHttpUploader.cpp 下的
//#include <QMimeDatabase>
编译可生成libqBreakpad.so文件即可
- google breakpad /qbreakpad 在 arm移植
- google breakpad
- Google breakpad
- google breakpad
- 在Android上玩google-breakpad(崩溃日志收集)
- Google Breakpad 在 windows下捕获程序崩溃报告
- 在Android上玩google-breakpad(崩溃日志收集)
- Google Breakpad在windows下捕获程序崩溃报告
- Google breakpad usage analysis
- [Google Breakpad] 入门指南
- google-breakpad学习资料
- google breakpad使用心得
- Google Breakpad: 实战crash .
- google-breakpad介绍
- Google Breakpad IOS
- Google Breakpad Android
- Google breakpad实战
- Google Breakpad 简介与使用
- Java泛型擦除和泛型重载
- html基础-文本、段落、列表标签
- 网卡多队列-转载原文地址:http://blog.chinaunix.net/uid-24830931-id-3352000.html
- Cassandra集群的搭建
- C++ STL一一map和multimap
- google breakpad /qbreakpad 在 arm移植
- 开始、结束时间校验
- java.awt.headless 模式
- Linux负载均衡软件LVS
- 利用三目运算跟if,输出最小值
- websocket
- 对称的二叉树 java实现
- [BZOJ3529][SDOI2014]数表(莫比乌斯反演+树状数组)
- 2017.11.10作业