问题标签 [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.
winapi - 禁用崩溃报告对话框时的 SetUnhandledExceptionFilter 和默认异常处理程序
我有一种情况,使用 SetUnhandledExceptionFilter (通过google breakpad)设置自定义异常处理程序的应用程序在 breakpad 异常处理程序发生崩溃后挂起,保存了一个小型转储文件并从 SetUnhandledExceptionFilter 函数返回 EXCEPTION_EXECUTE_HANDLER 执行标准异常处理程序。如果过滤器函数返回 EXCEPTION_CONTINUE_SEARCH 并且 Windows 错误报告对话框已通过 SetErrorMode() 禁用,也会发生挂起。如果不使用 SetErrorMode() 来禁用 WER,则一旦用户单击 WER 对话框中的“关闭”按钮,进程就会关闭。
挂起发生在 Windows XP 而不是 Windows 7 下。
SetUnhandledExceptionFilter的文档指出,当返回“EXECEPTION_EXECUTE_HANDLER”时,相关的异常处理程序将执行“通常导致进程终止”,但我找不到所使用的终止方法的文档。
堆栈跟踪显示挂起发生在第 3 方 DLL 中的对象的全局析构函数中,从 DllMain() 前奏中调用。
我猜这个互斥锁被一个已经被杀死的线程锁定了,但我可以想象其他类型的全局 ctors/dtors 可能以这种方式执行会导致类似的问题。我的问题是:
ExitProcess()
如果通过禁用 WER,是否会在发生崩溃时调用预期行为SetErrorMode()
?- 有谁知道可能相关的 Windows XP 和 Windows 7 之间默认异常处理程序的行为变化?
- 如果
ExitProcess()
是预期行为,在第三方 DLL 中处理此问题的最安全方法是什么?从breakpad异常处理程序调用TerminateProcess()
解决了这个问题,但有什么我应该注意的警告吗?
visual-studio - 如何使用 Qt Creator (gcc/MinGW) 在 Windows 上构建 Google breakpad?
给定:为 Qt Creator 编写的应用程序项目(4.7.4,仅限 Win32,gcc/MinGW)。
需要:插入著名的 Google breakpad 库以收集来自客户的详细故障转储。
我目前的发现如下:
- 那里有breakpad-qt项目,大约两年了。它包含要使用 Qt Creator 构建的上游 breakpad 源的子树,因此我尝试通过构建它来生成工作示例。
DbgHelp.h
由于使用了 Microsoft minidump 格式,breakpad 本身就依赖于Windows SDK。DbgHelp.h
可以在 Windows SDK 头文件中找到,但还包括一些来自 Visual Studio 的头文件,据报道这些头文件无法由 GCC/MinGW 编译(我想是 MSVS 编译器的不兼容语言扩展)。- google breakpad 包括 MSVS 解决方案文件(由 gyp 生成),并且可以通过 MSVS 轻松构建(我在 2008 和 2010 Express 版本上都成功了),生成了一些
.lib
与目标应用程序链接的 s。 - 但是
.lib
上面编译的文件不被 MinGW 理解ld
,所以无法与 Qt 项目链接。众所周知,库格式不兼容。 - 但是,来自 MinGW 工具(最新可用)
.lib
的工具可以理解 MSVS 2008(而不是 2010)的文件reimp
,该工具旨在将库从 MSVS 格式转换为 MinGW 可用格式。在我的情况下,符号似乎正确导出,还有一些.obj
文件,但是dlltool
MinGW 仍然无法链接重新编译的库(使用 MinGW)ld
。 - 并且
.lib
链接的所有大惊小怪都被另一个问题所阻止:Qt Project 中需要有效的头文件才能编译客户端代码,而这些头文件正是来自 breakpad 的头文件,包括DbgHelp.h
,见上文!
我看到的目前开放的替代方案:
- 将应用程序从 Qt/MinGW (Creator) 完全切换到 Qt/MSVS,这可以允许直接链接上游 breakpad。我认为这是 Qt + breakpad 的小 googleable 用例成功的核心。
- 构建一些混合方法,其中应用程序像往常一样使用 Creator 构建,然后通过 MSVS 链接器与 breakpad 链接。但又是头球!
- 为了使用纯 Qt Creator 进行编译,从 Microsoft 标头中撕下 breakpad 所需的最小关闭。
有什么建议,现有的经验吗?
c++ - 在库上使用 Breakpad:符号结构查询
我正在将 Breakpad 实现到几个应用程序中,在这些应用程序中,堆栈跟踪非常有用,但我对如何处理我们的一些库的符号文件有点困惑。
我已经为 Application 和 ourlibrary.so 生成了一个符号表,我已经将异常处理程序包含到 Applicaion 和 ourlibrary.so 中,它为两者生成了一个很好的转储,但只为 Application 获取符号表,所以我我想知道我是否在正确的位置有库的符号表。
目前其设置如下:
- 符号
- 应用
- Breakpad 生成的值
- 应用程序.sym
- 我们的图书馆.so
- Breakpad 生成的值
- 我们的图书馆.so
- 应用
我假设我弄乱了符号目录文件夹结构,但我不是 100% 确定。
android - 为 Android NDK 使用 Google Breakpad?
有人使用Google Breakpad for Android 本机代码 (NDK) 吗?
如果是这样,您能否详细说明如何启动和运行它(即客户端)。文档非常有限,根本没有提到 Android。构建系统包含 android 信息,但这让我认为它不应该是一个问题。
macos - Qt、谷歌 BreakPad 和 MacOs
有没有人在没有 xcode 的情况下使用标准 Qt 工具链在 MacOS 上成功构建 Google Breakpad?
我现在正在尝试在这个图书馆工作两天,但仍然没有成功。我已经成功编译并在 Windows 和 Linux 上运行它。(来自原始 Google-git 存储库)。
但是 MacOS 版本的库缺少libbreakpad_client.a的生成文件,并且生成的libbreakpad.a不包含异常处理程序。
http://screencast.com/t/V0mNiM3kZ
我在 stackoverflow上找到了关于这个问题的几个主题,但是更新生成文件的建议对我不起作用(或者我没有正确复制生成文件)。
我还尝试直接从 Mozilla 存储库(版本 10 和 11beta)下载更新版本。但是当我尝试编译 Mozilla 版本时,出现了另一个未定义符号的错误(在 Mac 和 Linux 上)。
我还找到了 AlekSi - breakpad-qt但这个版本也只能在 Win 和 Linux 下正常工作。在 Mac 下,有一些关于“未知架构——你在 PDP-11 上吗?”的错误。
我将感谢任何能告诉我如何编译它并让它在 Mac 下工作的人,或者能给我发送一个打包版本的 breakpad,它可以在 MacOS 下使用标准 make 编译并在 Qt 应用程序中使用。
谢谢卢德克
google-breakpad - 建立谷歌breakpad stackwalk
我可以构建 google breakpad 客户端,stackwalker 可以将转储转换为人类可读的 txt 文件。但是没有 gyp 文件可以制作 vs2008 解决方案。有谁知道如何在 Windows 上构建 stackwalker。谢谢
c++ - 为什么 google breakpad 不能处理所有崩溃?我该如何调试这些案例?
我正在使用google-breakpad。这是一个在后台运行的错误报告程序,用于报告另一个进程的崩溃。
它几乎适用于所有情况。
但是,它有时无法捕获崩溃。没有报告,也没有转储文件。它只是崩溃。崩溃的最后一条线索是 Windows 事件消息。
如何调试这些崩溃?什么会导致 Breakpad 无法处理崩溃?我可以使用什么方法来调试这种情况?
android-ndk - 谷歌breakpad无法在cygwin下为android编译
我从 svn 对 google breakpad 进行了干净的结帐,并尝试使用 cygwin for android 对其进行编译。然而,进展并不顺利。
我收到一个错误Can't build host-tools
,原因是:
如果我修改 makefile 以将这些警告作为错误选项删除,则构建会更进一步,但无法找到明显存在的文件:
但:
所有文件都以相同的方式失败 - 不仅仅是那个。
任何帮助表示赞赏。
linux - 如何使用 google breakpad 获取 coredump 的所有内存
我可以使用 MiniDumpWithFullMemory 在 windows 平台上获取 minidump 的所有内存。但是我如何在 linux 平台上做到这一点?
c++ - 当我使用线程时,Breakpad 无法在目标上创建小型转储
我发现我的测试应用程序在使用线程时没有生成正确的转储文件。我正在使用交叉编译器构建 Breadpad 库,然后将其与我的交叉编译器链接以在目标上运行。
我将首先解释我的设置:
基于:Ubuntu 12.04、i686
主机/目标:Vortex86DX,它是一个 i586 cpu,完全定制的 Linux 系统
构建工具:Buildroot、crosstool-ng、gcc 4.4.6、glibc 2.9
要构建 Breakpad,我这样做:
我的交叉编译器已集成到 Buildroot 中,我想构建在其上运行的二进制文件--host=i486-unknown-linux-gnu
我像这样交叉编译我的测试应用程序:
测试应用程序是:
我只是在 main() 崩溃和线程崩溃之间创建了变化。
当我在目标上交叉编译和运行我的应用程序时的观察结果:
(1) 没有线程的测试应用程序将在目标上创建正确的转储文件。经过
(2) 带有崩溃线程的测试应用程序将在目标上创建一个非常小且不正确的转储文件(大部分为零)。失败
(3) 测试应用程序,其线程不崩溃,主线程崩溃,将在目标上创建一个中等大小且不正确的转储文件。失败
编辑:在情况(1)中,回调返回successed=true。在情况 (2) 和 (3) 中,succeded=false。所以图书馆知道它没有成功。我想我的工作就是找出为什么它在我的目标上失败了。
如果我编译相同的测试应用程序以在我的构建计算机上运行,它会在所有情况下运行并创建正确的转储文件。即我已经在我的构建计算机上成功运行了交叉编译的 Crashpad 库,并且它可以正常工作。由于 build 和 host 都是 x86,因此这是可能的。
例如,我使用非交叉编译 g++ 构建
我的问题是:
是Breakpad的问题吗?
我的交叉编译库有问题吗?
内核有什么不同吗?我需要启用任何特定功能吗?
如何使它起作用?即在我的目标上运行的多线程应用程序会生成正确的小型转储文件