【发布时间】: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