C++ 在VisualStudio中生成一个具有私人象征意义的发布版本的正确方法是什么?

C++ 在VisualStudio中生成一个具有私人象征意义的发布版本的正确方法是什么?,c++,visual-studio,debug-information,C++,Visual Studio,Debug Information,在VisualStudio中生成一个可自定义的发布版本的正确配置是什么?我想生成并存储一个PDB文件,该文件允许我对构建的可执行文件的崩溃转储进行符号化,但避免在可执行文件中嵌入调试信息,从而允许外部用户在没有PDB的情况下观察符号,例如函数和变量名 我已经习惯了DWARF调试格式,它可以嵌入到可执行文件中,也可以导出到单独的dSYM文件中,这似乎与PDB大致相当;我不确定Visual Studio是否有类似的选项,即曾经/有时以类似方式将调试信息嵌入到可执行文件中,如果有,我需要打开哪些配置选

在VisualStudio中生成一个可自定义的发布版本的正确配置是什么?我想生成并存储一个PDB文件,该文件允许我对构建的可执行文件的崩溃转储进行符号化,但避免在可执行文件中嵌入调试信息,从而允许外部用户在没有PDB的情况下观察符号,例如函数和变量名

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

编译器选项允许您

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

/Zi和/Zi都将调试信息存储在程序数据库中。所有信息都不会编译到最终的可执行映像中


由于您计划使用调试信息来分析可能发布的版本的崩溃转储,请确保同时启用了编译器选项。

如果您正在编写PDB,我记得您已经分离了符号。C7调试兼容性将把它们嵌入最终的可执行文件中;一个单独的PDB将把它们存储在自己的文件中,作为构建过程的一部分,您应该保留这些文件,以便完全按照您所描述的内容进行构建;调试字段中的转储。您不需要也不应该希望发送PDB。在@WhozCraig的注释上展开,不需要符号信息来编写转储文件。符号在调试器中解析,使用您的私有PDB文件。@WhozCraig当然,我不打算发送PDB。只是担心调试信息是否可以嵌入到实际的可执行文件中。@Danra如果您使用常规的PDB输出,则不会这样做。如果您愿意,请使用“编辑并继续”;我宁愿不去。我们的构建过程通过将所有项目输出到一个统一的PDB文件夹来保留所有PDB,该文件夹与我们保留的.map文件的构建输出分开。所有项目都将其.pdb文件转储到该位置。当一个构建由于发布而进入永久保留状态时,PDB可用于执行您所描述的操作:加载客户转储并执行分析。客户没有任何符号。您可以使用编译器选项决定调试信息存储在何处。请注意,编译器选项已弃用。