问题标签 [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.
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(...) 以类似的方式失败?
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 输出如下所示:
输出如下所示:
android - 本机崩溃收集和符号化
有没有一种好方法可以收集在 android 应用程序的本机代码中发生的崩溃的崩溃转储,然后在台式机上象征该崩溃转储。
尝试集成 google breakpad 并成功收集故障转储。然后尝试符号化崩溃堆栈跟踪,但它不是那么有用。符号化崩溃堆栈中没有可用的文件名和行号信息。
符号化的部分输出如下所示:
有什么遗漏吗?
c++ - 在 Windows minidump 文件中嵌入线程名称
我们的 32 位 C++ 应用程序使用Windows 上的标准方法命名其线程。当发生错误时,我们会生成小型转储,但是当转储加载到 Visual Studio 2013 时,线程名称会丢失。鉴于存在大量线程,这使得调试问题变得更加困难。
我听说改善这一点的唯一方法来自此Microsoft User Voice 发布,调用者建议将它们嵌入自定义流中,并编写自定义 Visual Studio 扩展以在加载转储时重命名线程。但是,这似乎很麻烦,并且显然增加了加载过程的大量时间。
是否有一种更简单的方法可以将线程名称嵌入转储中,以便在 Visual Studio 中加载它们时“正常工作”?
供参考:我们使用 Visual Studio 2013 构建,我们的应用程序在 Win7 或更高版本上运行,我们使用 Google Breakpad 生成转储。
ios - 如何将 google-breakpad 添加到 iOS 项目?
我想将 google-breakpad 添加到 iOS 项目中,不幸的是,iOS 客户端的文档不存在(或者我找不到它),而且我对 mac/xcode/ios 的了解真的很差。我该如何配置它?
ios - 我可以将 mac dump_syms 用于 iOS 应用程序吗?
我想为 iOS 应用程序生成符号,但 Google break-pad 只有 mac dump_syms
,我没有为 iOS 找到它。我可以在 iOS 上使用它吗?当我尝试时,我收到此错误:
我尝试使用 iOS SDK 构建它,但我得到了同样的错误。
macos - OS X dlopen 找不到框架 - 找不到图像
我正在尝试将 Google Breakpad(一些外部框架)支持添加到我的应用程序中。我已经完成了所有必需的步骤,但是当我尝试使用 dlopen 加载我的应用程序时,我收到了这个错误:
我检查了一下,Breakpad 文件确实存在于相对路径(到 MyApp 文件)中。
这是 MyApp 文件上的 otool -L (注意@executable_path):
有人有线索吗?
linux - 如果父级在 google_breakpad::ExceptionHandler::SignalHandler 中崩溃或退出,则子级挂起
如果父进程在克隆子进程之后但在发送解除阻塞字节之前崩溃,则会发生这种情况SendContinueSignalToChild()
。在这种情况下,管道文件句柄保持打开状态,并且子进程read(...)
在WaitForContinueSignal()
. 崩溃后,孩子被 init 进程收养。
重现步骤:
l. 模拟父级崩溃google_breakpad::ExceptionHandler::GenerateDump(CrashContext *context)
:
- 将处理后的信号之一发送给父级(例如 SIGSEGV),以便调用上述
GenerateDump(...)
方法。 - 观察到 parent 退出但 child 仍然存在,被阻止
WaitForContinueSignal()
。
上述步骤的输出:
1687 是初始化 pid。
在现实世界中,崩溃发生在与处理信号的线程平行的线程中。exit(0)
注意:由于程序正常终止(即在并行线程中调用),也可能发生此问题。
在 Linux 3.3.8-2.2.、mips 和 i686 平台上测试。
所以,我的两个问题:
- breakpad 库让孩子保持活力是预期的行为吗?我的期望是孩子应该在父母崩溃/退出后立即退出。
- 如果不是预期的行为,在父崩溃/退出后完成客户端的最佳解决方案是什么?
提前致谢!
linux - 是否可以将二进制数据通过管道传输到 breakpad 的 dump_syms
Google 的dump_syms
程序需要一个输入文件和一个输出文件来编写符号化文件,例如:
我test.so
在内存缓冲区中有二进制文件。如果我首先将二进制文件写入临时文件,然后将其提供给dump_syms
然后删除此临时源,则性能不佳。
是否有可能以某种方式直接将二进制数据传输到dump_syms
文件系统中以绕过文件系统?我相信从 Linux 的原生管道的角度来看,一定有一种方法可以做到这一点。
我知道最好的方法是dump_syms
支持管道,但我想它没有这个功能。考虑到这一点,如果有任何提示可以修改 dump_syms 以接受管道,我也很想听听。
android - 构建谷歌breakpad android示例错误
Ubuntu 14.04 x64;ndk-r10c
当我在“android/sample_app”上运行 ndk-build 时,它可以生成 libbreakpad_client.a,但在链接抛出错误时:
我该如何解决这个错误?