Visual C ++ 2008“发布”版本包含调试信息

时间:2008-10-20 12:20:13

标签: c++ visual-studio debugging

我注意到在使用MS Visual Studio 2008生成新的C ++项目时, Release 版本包含调试符号 - 特别是启用了以下设置:

  • C ++ / General / Debug信息格式设置为程序数据库
  • 链接器/调试/生成调试信息设置设置为

我从未在早期版本的Visual Studio中注意到这一点。

因此,除了生成更大的EXE文件之外,启用这些设置还有什么缺点吗?

6 个答案:

答案 0 :(得分:32)

我们已经在我们的商业版本中打开了这些设置多年,没有明显的缺点。不过,好处是巨大的。

我们已经集成了一个崩溃转储打包程序,它将转储与其他一些信息打包在一起并通过电子邮件(经用户同意)发送到公司收件箱。这有助于我们找到让我们永远重现和发现的问题。

虽然它略显偏离主题,但这里有一个链接,可以帮助您轻松地将崩溃记者包含在C ++ / Windows应用程序中: http://www.codeproject.com/KB/debug/crash_report.aspx

注意:但是,在您的版本中不包含PDB文件是明智的。也就是说,您必须保留与发布版本匹配的PDB文件,以便将来可以正确调试问题。如果使用的PDB文件不是使用构建exe的相同代码构建的,那么当您尝试调试dmp时看到的堆栈将是错误的。

答案 1 :(得分:4)

默认情况下,它们会启用,因为:

  1. 如果您现在不创建它们,则无法在以后创建它们。
  2. 你需要它们。
  3. 在Visual C ++中启用调试信息会导致将一个小条目添加到二进制标头中,从而标识此二进制文件的PDB。它太小而不适合任何尺寸,并且不包含任何您可能担心共享的有用秘密。

    (标题条目标记为RSDS:谁可以猜到为什么?)

    当然,这些PDB将在您的构建计算机/备份中使用更多磁盘空间。处理它。在需要调试时需要那些PDB。

答案 2 :(得分:2)

好吧,您可能会提供此调试信息,有人可能会使用它来反汇编您的代码。对于一些可怕的人来说,这可能是一个不以这种方式离开的理由。

就个人而言,我认为有时为发布版本提供调试信息是有帮助的 - 这样就可以更容易地分析故障转储,如果应用程序崩溃,将由Dr. Watson存储。 我确实发现了一些非常模糊的错误。

答案 3 :(得分:2)

启用这些选项并不一定会使您的可执行文件更大。调试信息存储在单独的文件中,扩展名为PDB。提供调试信息绝不是一个坏主意,除非你真的缺少免费存储空间。

也许这就是为什么它们默认处于启用状态:它们不会损害您的可执行文件。发布版本确实使用优化功能,例如函数内联和生成优化代码,这使得它更难以逐步完成,而Debug版本则关闭了这些选项。

这里没有缺点。

戴夫

答案 4 :(得分:1)

除了PDB之外,添加/ Zi开关确实会生成更大的.exe文件。但是,您可以单独链接/ OPT:REF以使.exe文件大小保持最小。

答案 5 :(得分:0)

由于对.pdb文件的引用(即额外路径),.exe会略大。就是这样。