【问题标题】:How can I migrate from a Microsoft Symbol Server to Google Breakpad?如何从 Microsoft Symbol Server 迁移到 Google Breakpad?
【发布时间】:2015-10-11 09:07:45
【问题描述】:
我们的产品会生成minidump files,以防出现问题。我们运行symbol server 来存储和访问我们构建的调试符号,以便我们从转储文件中获得正确的堆栈跟踪。
由于我们的产品还可以在其他操作系统(特别是 Linux 和 OS X)上运行,我们开始关注Google breakpad。我似乎也使用小型转储和 PDB 文件进行存储。但是,我想知道:
(如何)我可以将现有的符号服务器迁移到 Google breakpad,这样我就不会丢失所有现有的符号?我想其他人已经采取了同样的行动,也许有一些共同的方法?
【问题讨论】:
标签:
debug-symbols
google-breakpad
symstore
【解决方案1】:
你有几个选择:
run dump_syms(这是一个将 pdb 处理成基于文本的工具
breakpad 的 .sym 格式,带有 breakpad)在所有 pdb 上已经在
服务器,然后将它们上传到您的breakpad服务器(有一个
几个选项,我们使用 socorro)。你还需要继续跑步
它在您关心的构建的所有新符号上。
从服务器请求符号,因为 stack_walker 在处理传入的崩溃时需要它们(我们还没有这样做)
定期查找上次崩溃次数中丢失的符号,查看它们是否在符号服务器上,通过 dump_syms 运行它们,
将 .syms 上传到您的崩溃服务器,然后将崩溃发送到重新处理。
您需要访问 MS 符号服务器以获取系统符号,因此您必须为此实现稍后的选项之一。
我们为系统符号选择了选项 3,但实施很大程度上取决于所使用的崩溃服务器(我们使用的是 socorro crash-stats,不是推荐的配置)。 MS符号服务器集成有多种python实现。从 stack_walker 你会知道符号的名称和 GUID,所以你可以忽略 PE 解析部分。
需要注意的一个问题:OSX 上没有符号服务器的概念,并且 breakpad 崩溃转储在那里毫无用处。要从 OSX 崩溃重建堆栈跟踪,您将需要访问原始系统二进制文件(通过 dump_syms 运行它们)。这可能并不总是可能的。您将需要手动构建 OSX 符号存储库,另请参阅:https://wiki.mozilla.org/Breakpad:Symbols
Catch #2:Windows 使用不区分大小写的 FS(令人惊讶),有时生成的 pdb 会被链接器无缘无故地小写(而使用它的 PE 二进制文件仍然引用正确的大小写)。如果您的崩溃服务器在 *nix 机器上运行,这会让人头疼。考虑从 PE 二进制文件本身中提取符号名称,而不是在这种情况下依赖 pdb 文件名。
Catch #3:您仍然需要运行符号服务器来调试 breakpad 上传的转储文件(以防堆栈跟踪不够,并且您想在 Visual Studio 中打开转储)。 BP 使用符号服务器,而不是替换它。