【问题标题】:What's the correct way to make a privately symbolicatable release build in Visual Studio?在 Visual Studio 中制作私有可符号化版本的正确方法是什么?
【发布时间】:2017-01-31 11:36:09
【问题描述】:

在 Visual Studio 中构建私有符号化版本的正确配置是什么?我想生成和存储一个 PDB 文件,它允许我对构建的可执行文件的故障转储进行符号化,但要避免在可执行文件本身中嵌入调试信息,这将允许外部用户观察符号,例如函数和变量名称,而无需PDB。

我习惯了 DWARF 调试格式,它既可以嵌入到可执行文件中,也可以导出到单独的 dSYM 文件中,这似乎与 PDB 大致相当;我不确定 Visual Studio 是否有类似的选项,即曾经/有时在可执行文件中嵌入类似的调试信息,如果有,我需要打开哪些配置选项以确保发布版本没有t 嵌入此信息。

【问题讨论】:

  • 如果您正在编写 PDB,我记得您已经分离了符号。 C7 调试兼容性会将它们嵌入到最终的可执行文件中;一个单独的 PDB 会将它们存储在自己的文件中(您应该将其与发布位一起保留,作为构建过程的一部分,以便完全按照您的描述进行操作;从现场调试转储)。您不需要(并且应该不想)运送 PDB。
  • 扩展@WhozCraig 的评论,MiniDumpWriteDump 不需要符号信息来编写转储文件。使用您的私有 PDB 文件在您的调试器中解析符号。
  • @WhozCraig 当然,我无意发布 PDB。只是担心调试信息是否可以嵌入到实际的可执行文件中。
  • @Danra 如果您使用常规 PDB 输出,则不会(如果您愿意,请使用编辑并继续;我不喜欢)。我们的构建过程通过让所有项目将它们输出到与构建输出分开的单个统一 PDB 文件夹来保留所有 PDB(我们也保留 .map 文件)。所有项目都将其 .pdb 文件转储到该位置。当构建被永久保留(由于发布)时,PDB 可用于执行您所描述的操作:加载客户转储和执行分析。客户没有任何符号。
  • 您可以使用/Z7, /Zi, /ZI (Debug Information Format) 编译器选项决定调试信息的存储位置。请注意,编译器选项 /Yd (Place Debug Information in Object File) 已弃用。

标签: c++ visual-studio debug-information


【解决方案1】:

/Z7, /Zi, /ZI (Debug Information Format) 编译器选项允许您

选择为您的程序创建的调试信息的类型以及该信息是保存在对象 (.obj) 文件中还是保存在程序数据库 (PDB) 中。

/Zi/ZI 都将调试信息存储在程序数据库中。这些信息都不会被编译成最终的可执行映像。

由于您计划使用调试信息来分析(可能)发布版本的故障转储,请确保 /Zo (Enhance Optimized Debugging) 编译器选项也已启用。

【讨论】:

    猜你喜欢
    • 2018-06-13
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多