问题标签 [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 回答
448 浏览

macos - OSX 中的 Breakpad:检查崩溃的进程失败

我试图弄清楚为什么在 OSX 10.8 上检查崩溃的进程失败。我正在将 Breakpad 添加到一个非常庞大且复杂的专业应用程序的 Mac 版本中。我目前正在使用 Breakpad r1035。由于我无法控制的情况,我的应用程序是使用 XCode 3.2.6 (GCC 4.2) 构建的。这可能是一个长镜头,因为最近在 SO 上的 Breakpad 标签下没有很多活动。

我已经对 Breakpad 代码进行了一些挖掘,以确定故障发生的确切位置。generator.Write(...)调用Inspector::InspectTask()返回 false 。在 内Write(),对 的调用会WriteMemoryListStream(...)导致进行ReadTaskMemory(...)系统mach_vm_read(...)调用,该系统调用具有稍后由 Inspector 报告的错误:Error writing minidump - errno=No such process

是否有原因导致崩溃过程不存在,或者 Inspector 无法正确检测到它?我尝试将@BREAKPAD_SEND_AND_EXIT设置更改为“否”,但这并没有什么不同。每次我导致崩溃时都会生成一个 2MB 的 .dmp 文件,其中包含非人类可读的文本。

这是我引发崩溃时 Inspector 的标准输出:

这是我引发崩溃时 Inspector 的标准错误(已编辑以删除目录):

是否有人在将 Breakpad 添加到 Mac 上的应用程序时遇到过类似的问题?或者看到 mach_vm_read(...) 以类似的方式失败?

0 投票
2 回答
7642 浏览

google-breakpad - stackwalker 加载所有符号文件,但仍然没有符号化任何东西

我可能做错了什么,但我无法弄清楚这一点。

我有一个在 Windows 上生成的简单崩溃小型转储。如果我在 Visual Studio 中打开转储,它会毫无问题地加载并显示崩溃线。但我无法让它在 minidump_stackwalker 中进行符号化。

我确实创建了一个符号存储库文件夹,里面有:symbols/myapplication.pdb/67892B042C8F4CCFAA6BE53445F9B2141/myapplication.sym 以及应用程序使用的所有:symbols/wkernel32.pdb/XXXXXX/wkernel32.sym 等。

当我调用“minidump_stackwalk mycrash.dmp 符号”时,stderr 显示 simple_symbol_supplier 正确找到所有符号并加载它们。但是,输出一直是堆栈,其中没有任何符号。

我还尝试在 linux 和 MacOSX 上编译并运行 minidump_stackwalk,但结果是一样的。

我究竟做错了什么?

stackwalk 的 stderr 输出如下所示:

输出如下所示:

0 投票
1 回答
963 浏览

android - 本机崩溃收集和符号化

有没有一种好方法可以收集在 android 应用程序的本机代码中发生的崩溃的崩溃转储,然后在台式机上象征该崩溃转储。

尝试集成 google breakpad 并成功收集故障转储。然后尝试符号化崩溃堆栈跟踪,但它不是那么有用。符号化崩溃堆栈中没有可用的文件名和行号信息。

符号化的部分输出如下所示:

有什么遗漏吗?

0 投票
2 回答
1646 浏览

c++ - 在 Windows minidump 文件中嵌入线程名称

我们的 32 位 C++ 应用程序使用Windows 上的标准方法命名其线程。当发生错误时,我们会生成小型转储,但是当转储加载到 Visual Studio 2013 时,线程名称会丢失。鉴于存在大量线程,这使得调试问题变得更加困难。

我听说改善这一点的唯一方法来自此Microsoft User Voice 发布,调用者建议将它们嵌入自定义流中,并编写自定义 Visual Studio 扩展以在加载转储时重命名线程。但是,这似乎很麻烦,并且显然增加了加载过程的大量时间。

是否有一种更简单的方法可以将线程名称嵌入转储中,以便在 Visual Studio 中加载它们时“正常工作”?

供参考:我们使用 Visual Studio 2013 构建,我们的应用程序在 Win7 或更高版本上运行,我们使用 Google Breakpad 生成转储。

0 投票
0 回答
825 浏览

ios - 如何将 google-breakpad 添加到 iOS 项目?

我想将 google-breakpad 添加到 iOS 项目中,不幸的是,iOS 客户端的文档不存在(或者我找不到它),而且我对 mac/xcode/ios 的了解真的很差。我该如何配置它?

0 投票
1 回答
885 浏览

ios - 我可以将 mac dump_syms 用于 iOS 应用程序吗?

我想为 iOS 应用程序生成符号,但 Google break-pad 只有 mac dump_syms,我没有为 iOS 找到它。我可以在 iOS 上使用它吗?当我尝试时,我收到此错误:

我尝试使用 iOS SDK 构建它,但我得到了同样的错误。

0 投票
2 回答
2399 浏览

macos - OS X dlopen 找不到框架 - 找不到图像

我正在尝试将 Google Breakpad(一些外部框架)支持添加到我的应用程序中。我已经完成了所有必需的步骤,但是当我尝试使用 dlopen 加载我的应用程序时,我收到了这个错误:

我检查了一下,Breakpad 文件确实存在于相对路径(到 MyApp 文件)中。

这是 MyApp 文件上的 otool -L (注意@executable_path):

有人有线索吗?

0 投票
1 回答
419 浏览

linux - 如果父级在 google_breakpad::ExceptionHandler::SignalHandler 中崩溃或退出,则子级挂起

如果父进程在克隆子进程之后但在发送解除阻塞字节之前崩溃,则会发生这种情况SendContinueSignalToChild()。在这种情况下,管道文件句柄保持打开状态,并且子进程read(...)WaitForContinueSignal(). 崩溃后,孩子被 init 进程收养。

重现步骤

l. 模拟父级崩溃google_breakpad::ExceptionHandler::GenerateDump(CrashContext *context)

  1. 将处理后的信号之一发送给父级(例如 SIGSEGV),以便调用上述GenerateDump(...)方法。
  2. 观察到 parent 退出但 child 仍然存在,被阻止WaitForContinueSignal()

上述步骤的输出

1687 是初始化 pid。

在现实世界中,崩溃发生在与处理信号的线程平行的线程中。exit(0)注意:由于程序正常终止(即在并行线程中调用),也可能发生此问题。

在 Linux 3.3.8-2.2.、mips 和 i686 平台上测试。

所以,我的两个问题

  1. breakpad 库让孩子保持活力是预期的行为吗?我的期望是孩子应该在父母崩溃/退出后立即退出。
  2. 如果不是预期的行为,在父崩溃/退出后完成客户端的最佳解决方案是什么?

提前致谢!

0 投票
1 回答
258 浏览

linux - 是否可以将二进制数据通过管道传输到 breakpad 的 dump_syms

Google 的dump_syms程序需要一个输入文件和一个输出文件来编写符号化文件,例如:

test.so在内存缓冲区中有二进制文件。如果我首先将二进制文件写入临时文件,然后将其提供给dump_syms然后删除此临时源,则性能不佳。

是否有可能以某种方式直接将二进制数据传输到dump_syms文件系统中以绕过文件系统?我相信从 Linux 的原生管道的角度来看,一定有一种方法可以做到这一点。

我知道最好的方法是dump_syms支持管道,但我想它没有这个功能。考虑到这一点,如果有任何提示可以修改 dump_syms 以接受管道,我也很想听听。

0 投票
1 回答
2301 浏览

android - 构建谷歌breakpad android示例错误

Ubuntu 14.04 x64;ndk-r10c

当我在“android/sample_app”上运行 ndk-build 时,它可以生成 libbreakpad_client.a,但在链接抛出错误时:

我该如何解决这个错误?