问题标签 [google-breakpad]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
284 浏览

android - Android JNI 使用 BreakPad 崩溃

我正在使用 Breakpad 捕获 NDK 崩溃,它与 HockeyApp 集成。一切正常,除了使用 DexGuard 进行代码混淆的发布版本。所以基本上堆栈跟踪在这种情况下是不可读的。

有没有人对此配置有类似的问题,或者还有其他一些潜在的 NDK 崩溃日志解决方案,其中包含 DexGuard,因此可以在 Hockeyapp 上显示。

提前致谢

0 投票
0 回答
1038 浏览

windows - 是否可以在 Windows 上将 minidump 转换为核心文件?

我正在尝试在我们的跨平台运行的应用程序中实现 breakpad 崩溃处理程序。

我在 Linux 构建方面取得了巨大的成功,但是,在 Windows 上,我已经获得了崩溃转储,使用 dump_syms 实用程序从 .exe 中提取符号,并使用 minidump_stackwalk 检查崩溃和行号。

除非我遗漏了什么,否则仅使用 minidump_stackwalk 来进一步调试(检查局部变量等)是很困难的(不可能)。在 Linux 上,我使用了 minidump-2-core 工具将 minidump 转换为可以在 gdb 中加载的核心文件。在 Windows 上,我们使用 MSYS2/MINGW64 环境来构建应用程序。是否可以将小型转储转换为核心并以类似的方式加载它们?

我知道另一种方法是使用 WinDbg,但是我似乎无法从 .exe 中正确提取符号。关于我将如何做到这一点的任何提示?

0 投票
1 回答
894 浏览

c++ - Breakpad 的 dump_syms 无法正常工作

问题是我最近一直在使用breakpad ,并且在sym文件中生成“ FILE ”数据时遇到了一些问题。

在我的符号文件中

我的源文件的实际路径

如您所见,我的源文件的路径被转换为小写。关于出了什么问题的任何想法?

我将可用dump_syms.exe用于我的pdb 文件

0 投票
0 回答
170 浏览

c++ - Google breakpad ThreadEntry 函数在 MIPS 架构上崩溃

我下载了谷歌breakpad源码做一些测试,demo可以在X64和ARM64上正常工作,但是在MIPS64上它不会生成minidump文件,并且在ExceptionHandler::GenerateDump()下sys_clone后子线程会崩溃;我检查了子线程的输入地址,发现地址减少了16个字节,我的内核版本是:

我的测试代码是:

我在 ./src/client/linux/handler/exception_handler.cc 中添加了一些 printf,在 sys_clone 之前和 ThreadEntry 之后,日志是:

如果thread_arg的类型是int *,则不存在地址偏移问题。如果为thread_arg添加前缀static,也没有地址偏移问题。

我编写了另一个代码来测试信号处理功能下的 sys_clone:

它工作正常:

我想知道为什么将堆栈的内容作为参数传递会导致 breakpad 中的地址不匹配问题。

0 投票
0 回答
176 浏览

linux - Electron breakpad minidump 版本不匹配

尝试在从 Electron 应用程序生成的 crashdump 上使用 minidump_stackwalk。但收到以下错误:

错误:小型转储版本不匹配:0xbfef!= 0xa793

知道如何解决这个问题吗?

从同一个电子应用程序中,故障转储是正确的,而其他则不是。查看了 Google Breakpad 代码,上面的版本号0xa793在里面是硬编码的

/src/google_breakpad/common/minidump_format.h:#define MD_HEADER_VERSION 0x0000a793 /* 42899 */

需要知道从哪个breakpad源0xbfef生成,以便对应的代码用来生成调用栈。

提前致谢。

0 投票
1 回答
621 浏览

ninja - 如何将 Google Crashpad 构建到共享(动态)库中?

问题总结

我正在尝试将Google Crashpad(Google Breakpad 的继任者)一个崩溃报告系统集成到一个动态链接到其所有外部库的软件套件中。我的问题是 Crashpad 的默认设置是构建为静态库 - 我需要动态构建它。

克隆 Crashpad 后,使用GN为构建生成.ninja文件。构建命令如下:

$ gn gen out/Default

上面的命令生成所有的 .ninja 文件。

(旁白)要生成 Visual Studio 解决方案文件 (.sln),可以使用以下生成命令:

$ gn gen out/Default --ide=vs

编译:

$ ninja -C out/Default

我试过的

  1. 这个 StackOverflow Question回答了同样的问题,建议您可以简单地修改输出的 .ninja 文件的链接标志(/MT 更改为 /MD)。但是,对所有输出文件进行 grepping 显示不存在此类标志。

  2. Backtrace 集成指南有一个链接,指向预建的动态(共享)crashpad。但是,他们似乎使用 Visual Studio 2017 构建了这些库,使用的工具集 (v141) 比我可以使用的更新。我需要重新构建 Crashpad 以进行动态链接,并使用 Visual Studio 2015 (v140)。

0 投票
0 回答
228 浏览

qt - 为什么链接到 GoogleBreakpad 时出现链接器错误 2019?

经过几个小时的挖掘这个链接器错误,它没有成功:(

重现步骤:

  1. 安装 gyp它到PATH
  2. 打开VS2015 x86 Native Tools Command Prompt
  3. 跑:
    • git clone https://chromium.googlesource.com/breakpad/breakpad && cd breakpad
    • cd src && git clone https://github.com/google/googletest testing && cd ..
    • gyp -–no-circular-check src\client\windows\breakpad_client.gyp
  4. 打开src\client\windows\breakpad_client.sln
  5. 转到项目Properties>C/C++/General并更改Treat Warnings As ErrorsNocrash_generation_client、common、exception_handlerDebugRelease配置
  6. 转到项目Properties>C/C++/General并更改Treat wchar_t as Built-in TypeNocrash_generation_client、common、exception_handlerDebugRelease配置
  7. 一切为了Debug
  8. 一切为了Release
  9. 将位于您的应用程序中的库链接breakpad\src\client\windows\Debug\libbreakpad\src\client\windows\Release\lib您的应用程序,在我的情况下,Qt qmake文件如下所示:
  1. 链接器应通过以下错误提示您:

    crash_handler.obj:错误 LNK2019:无法解析的外部符号“公共:__thiscall google_breakpad::ExceptionHandler::ExceptionHandler(class std::basic_string,class std::allocator > const &,bool (__cdecl*)(void *,struct _EXCEPTION_POINTERS *,结构 MDRawAssertionInfo ),bool (__cdecl)(wchar_t const *,wchar_t const *,void *,struct _EXCEPTION_POINTERS *,struct MDRawAssertionInfo *,bool),void *,int)" (??0ExceptionHandler@google_breakpad@@QAE@ABV?$basic_string@_WU?$char_traits@ _W@std@@V?$allocator@_W@2@@std@@P6A_NPAXPAU_EXCEPTION_POINTERS@@PAUMDRawAssertionInfo@@@ZP6A_NPB_W5123_N@Z1H@Z) 在函数“public: void __thiscall breakpad::CrashHandlerPrivate::initCrashHandler(class QString const &)" (?initCrashHandler@CrashHandlerPrivate@breakpad@@QAEXABVQString@@@Z) crash_handler.obj : 错误 LNK2019: 无法解析的外部符号 "public: __thiscall google_breakpad::ExceptionHandler::~ExceptionHandler(void)" (??1ExceptionHandler@google_breakpad @@QAE@XZ) 在函数“public: void * __thiscall google_breakpad::ExceptionHandler::`标量删除析构函数”中引用(unsigned int)" (??_GExceptionHandler@google_breakpad@@QAEPAXI@Z) crash_handler.obj : 错误 LNK2019: 无法解析的外部符号 "public: bool __thiscall google_breakpad::ExceptionHandler::WriteMinidump(void)" (?WriteMinidump@ExceptionHandler@google_breakpad @@QAE_NXZ) 在函数 "public: bool __thiscall breakpad::CrashHandler::writeMinidump(void)" (?writeMinidump@CrashHandler@breakpad@@QAE_NXZ) 中引用(?writeMinidump@CrashHandler@breakpad@@QAE_NXZ)(?writeMinidump@CrashHandler@breakpad@@QAE_NXZ)

crash_handler.h

crash_handler.cpp

真的不知道是什么问题?!

配置:

  • 操作系统:Windows 10(1809)

  • 构建系统:MSVC14.0(2015)

  • Qt版本:5.8(32bit)

0 投票
1 回答
803 浏览

visual-c++ - 如何使用 MSVC (Microsoft Visual C++) 2015 构建 Google Crashpad?

Google Crashpad 声称可以使用 MSVC 2015 和 MSVC 2017 进行编译(在撰写本文时)。

但是,Google Crashpad 依赖于mini_chromium,这是一个明确指示需要 MSVC 2017 或更高版本的 chromium 项目。

我尝试按照本指南、最新的 Crashpad 提交和depot_tools 编译 Crashpad。我可以在 MSVC 2017 上成功编译,但是在使用 MSVC 2015 和 mini_chromium 时会收到大量编译器错误——我需要我的客户端软件动态链接到使用 MSVC 2015 编译的库。

这个 StackOverflow 问题使我能够将 Crashpad 构建到动态库中。但我只能在 MSVC 2017 中这样做。当我稍后尝试将 MSVC 2015 编译的软件与 MSVC 2017 中的 Crashpad 构建链接时,我收到此错误

0 投票
0 回答
265 浏览

c++ - 即时将 coredump 转换为 minidump

我正在尝试在具有 1Gb RAM 的 aarch64 板上运行的嵌入式 linux 系统上将 linux 内核生成的 coredump 自动转换为 minidump(使用 breakpad 工具)。
我遇到的主要问题是生成的核心转储太大而无法存储,并且在生成时必须压缩。

所以我尝试将核心文件流直接传递给用于转换的breakpad工具:

但似乎 core2md 期望磁盘上有一个文件(它映射整个文件,然后使用偏移量检索信息)。

我想知道是否有办法将 core2md 源代码修补为:
* 将整个流映射到内存中,而不必在磁盘上写入文件,
* 或通过直接读取流来提取所有必要的信息,
* 或 gunzip文件到内存

0 投票
1 回答
68 浏览

signals - 信号何时自动重新抛出?

breakpad 中的以下注释表明重置信号处理程序会强制重新抛出信号。但是,我无法在网上找到任何描述此行为的文档。

此外,这里的注释说一旦信号处理程序返回,信号将被重新抛出。这也是信号处理程序恢复或重置为默认值的结果吗?