如果出现问题,我们的产品会生成minidump files。我们运行symbol server来存储和访问构建的调试符号,以便从转储文件中获取正确的堆栈跟踪。
由于我们的产品也在其他操作系统(特别是Linux和OS X)上运行,我们开始关注Google breakpad。我似乎也使用minidumps和PDB文件进行存储。但是,我想知道:
(如何)我可以将现有的符号服务器迁移到Google破解版,这样我就不会丢失所有现有符号吗?我想其他人已经做了同样的举动,也许有一些共同的方法呢?
答案 0 :(得分:3)
您有几个选择:
运行dump_syms(这是一个将pdbs处理为基于文本的工具 已经存在的所有pdb上都有breakpad的.sym格式,附带breakpad) 服务器,然后将它们上传到您的breakpad服务器(有一个 夫妻俩选择,我们使用socorro)。你还需要继续跑步 它适用于您关注的构建的所有新符号。
请求来自服务器的符号,因为stack_walker在处理传入的崩溃时需要它们(我们还没有完成)
定期查找最后崩溃次数中丢失的符号,查看它们是否在符号服务器上,通过dump_syms运行它们, 将.syms上传到崩溃服务器,然后将崩溃发送到重新处理。
您需要点击MS符号服务器以获取系统符号,因此您必须为此实现以下选项之一。
我们选择了系统符号选项3,但实施很大程度上取决于所使用的崩溃服务器(我们使用的是socorro crash-stats,而不是推荐的配置)。围绕MS符号服务器集成有多个python实现。从stack_walker您将知道符号的名称和GUID,因此您可以忽略PE解析部分。
要注意的一个问题:OSX上没有符号服务器的概念,并且破坏板崩溃转储在那里是无用的。要从OSX崩溃重建堆栈跟踪,您需要访问原始系统二进制文件(通过dump_syms运行它们)。这可能并不总是可行的。您需要手动构建OSX符号的存储库,另请参阅:https://wiki.mozilla.org/Breakpad:Symbols
Catch#2:Windows使用不区分大小写的FS(意外),有时生成的pdb由链接器小写,没有充分的理由(使用它的PE-binary仍然引用正确的情况)。如果崩溃服务器在* nix机器上运行,这会造成麻烦。考虑从PE二进制文件本身提取符号名称,而不是在这种情况下依赖于pdb文件名。
Catch#3:你仍然需要运行符号服务器来调试breakpad上传的转储文件(如果堆栈跟踪不够,你想在visual studio中打开转储)。 BP 使用符号服务器,而不是替换它。