我的应用程序在Mac上设法使客户的Chrome浏览器崩溃。我要求客户启用崩溃报告,并在下次发生这种情况时将转储文件发给我。我得到了一个crash。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
我的问题是如何获得崩溃转储和调试它的符号?
Crashpad以Windows minidump格式写入转储文件。微软商店中当前的WinDbg预览版(1.2205.18001.0)确实可以打开并调试crashpad从Windows以外的平台(包括Linux和Mac OS)转储。它理解并支持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也有自己的一套工具来从crash- pad转储中提取信息:https://www.chromium.org/developers/decoding-crash-dumps/