使用Visual Studio在发布二进制文件中生成符号

时间:2009-05-14 20:24:21

标签: c++ visual-studio debugging symbols

更新:我在John Robbins博客上发布了关于该帖子的评论。他在这里写了一个回复:

http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/06/19/do-pdb-files-affect-performance.aspx

我正在处理的项目没有为其发布二进制文件构建符号,我想改变它。

一些信息:

  • 主要是C ++代码库,有些是C#。
  • 在VS2k5下编译,将转移到VS2k8 Team System。
  • 时间关键软件。
  • 必须启用优化。
  • 向客户提供源代码,因此完整符号正常。

什么是最好的命令行开关来生成我需要的,以及我将采取什么(如果有的话)性能?

此外,是否有任何“陷阱”需要注意?

感谢。

5 个答案:

答案 0 :(得分:7)

答案 1 :(得分:6)

生成调试符号(即PDB文件)只是创建一个外部文件,调试器在查看内存中的代码时可以引用该文件。它不会影响编译器或链接器生成的代码(有点像生成.MAP文件)。

现在,如果您正在讨论在发布版本中定义_DEBUG,那就完全不同了。

答案 2 :(得分:5)

更新:我在John Robbins博客上发布了关于该帖子的评论。他在这里写了一个回复:

http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/06/19/do-pdb-files-affect-performance.aspx

我在microsofts网站上找到以下链接: Generating and Deploying Debug Symbols with Microsoft Visual C++ 6.0

此链接适用于Visual C ++ 6,但我假设这些说明与Visual C ++ 8(2005)和9(2008)相同。

它提供的信息与TheBlack提供的链接非常相​​似,但更深入。

由于

答案 3 :(得分:1)

Visual C ++中的/Zi开关将创建一个PDB,但是此设置还意味着将使DLL或EXE变大的其他设置。具体来说,/Zi表示/DEBUG,它表示/INCREMENTAL/OPT:NOREF/OPT:NOICF。最后三个使编译的DLL或EXE更大,但是除了/OPT:REF之外,还可以通过指定/OPT:ICF/Zi来覆盖它们。无需覆盖/INCREMENTAL,因为/OPT:REF和/或/OPT:ICF将确保完整的,非增量链接。

来源:Correctly Creating Native C++ Release Build PDBs

答案 4 :(得分:0)

我不知道命令行,但您需要在IDE中编译调试符号(程序数据库)和链接器(生成调试信息)。

如果在项目中找到设置,可以使用帮助查看它们引用的命令行。