【问题标题】:Debugging Chrome Crashpad crash report from Mac从 Mac 调试 Chrome Crashpad 崩溃报告
【发布时间】:2022-06-11 03:03:58
【问题描述】:

我的应用程序以某种方式使客户的 Mac 上的 Chrome 浏览器崩溃。我要求客户启用崩溃报告,并在下次发生故障时将转储文件发送给我。我得到了一个 Crashpad.zip 文件,其中包含一堆 .dmp 文件。我想每个文件都代表一个 Chrome 标签的进程。尝试使用 Visual Studio 或 WinDbg 打开这些转储不起作用。请注意,转储文件是在 Mac 上捕获的,而我在 Windows 上工作。

当尝试使用 ~k 查看调用堆栈时,我得到了输出:

0:000> ~k
 # Child-SP          RetAddr               Call Site
00 00000001`6ee35960 00000000`00000000     Google_Chrome_Framework+0x4486b50

当尝试从 Chromium 符号服务器加载符号时,我得到:

0:000> .sympath+ SRV\*C:\symbols\*https://chromium-browser-symsrv.commondatastorage.googleapis.com
Symbol search path is: srv*;https://chromium-browser-symsrv.commondatastorage.googleapis.com;SRV\*C:\symbols\*https://chromium-browser-symsrv.commondatastorage.googleapis.com
Expanded Symbol search path is: cache*;SRV*https://msdl.microsoft.com/download/symbols;https://chromium-browser-symsrv.commondatastorage.googleapis.com;srv\*c:\symbols\*https://chromium-browser-symsrv.commondatastorage.googleapis.com

************* Path validation summary **************
Response                         Time (ms)     Location
Deferred                                       srv*
Deferred                                       https://chromium-browser-symsrv.commondatastorage.googleapis.com
Deferred                                       SRV\*C:\symbols\*https://chromium-browser-symsrv.commondatastorage.googleapis.com
*** WARNING: Unable to verify timestamp for Google Chrome Framework
0:000> .reload
................................................................
................................................................
................................................................
................................................
Unable to load image /Applications/Google Chrome.app/Contents/Frameworks/Google Chrome Framework.framework/Versions/101.0.4951.54/Google Chrome Framework, Win32 error 0n2
*** WARNING: Unable to verify timestamp for Google Chrome Framework

************* Symbol Loading Error Summary **************
Module name            Error
Google Chrome Framewor The system cannot find the file specified

我的问题是如何获取故障转储的符号并对其进行调试?

【问题讨论】:

  • 如果这些故障转储是在 macOS 上捕获的,那么它将无法在 Windows 上运行。但我怀疑 crashpad 使用 macOS 的 dmp 文件。如果您有调试符号并假设 dmp 文件是由 crashpad 在 Windows 上生成的,那么您绝对可以在 VS 中调试 dmp 文件
  • 不知WinDbg竟然能打开这些到现在可以输入命令。

标签: google-chrome debugging chromium windbg crashpad


【解决方案1】:

Crashpad 以一种有效的 Windows minidump 格式写入其转储。 Microsoft 商店中当前的 WinDbg Preview (1.2205.18001.0) 确实可以从 Windows 以外的平台(包括 Linux 和 Mac OS)打开和调试 crashpad 转储。它理解并支持 MachO 图像、MachO 符号和包含在 MachO 中的私有 DWARF 符号。

也就是说——为了有用——目标进程中加载​​的图像和符号需要由调试器发现。我在 Chromium 方面的经验有限;但是,据我所知,符号服务器只索引那里的 Windows 版本。

Linux ELF 和 Mac MachO 图像确实可以在符号服务器上建立索引。相关文档和索引键格式可在 https://github.com/dotnet/symstore/blob/main/docs/specs/SSQP_Key_Conventions.md

获得

如果您有直接下载某些东西的图像/符号(例如:调试包等),您可以将它们放在本地路径中,使用 .sympath 和 .reload 将调试器指向这样的路径。

我相信 Chromium 也有自己的一套工具来从 crashpad 转储中提取信息:https://www.chromium.org/developers/decoding-crash-dumps/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多