我注意到在使用MS Visual Studio 2008生成新的C ++项目时, Release 版本包含调试符号 - 特别是启用了以下设置:
我从未在早期版本的Visual Studio中注意到这一点。
因此,除了生成更大的EXE文件之外,启用这些设置还有什么缺点吗?
答案 0 :(得分:32)
我们已经在我们的商业版本中打开了这些设置多年,没有明显的缺点。不过,好处是巨大的。
我们已经集成了一个崩溃转储打包程序,它将转储与其他一些信息打包在一起并通过电子邮件(经用户同意)发送到公司收件箱。这有助于我们找到让我们永远重现和发现的问题。
虽然它略显偏离主题,但这里有一个链接,可以帮助您轻松地将崩溃记者包含在C ++ / Windows应用程序中: http://www.codeproject.com/KB/debug/crash_report.aspx
注意:但是,在您的版本中不包含PDB文件是明智的。也就是说,您必须保留与发布版本匹配的PDB文件,以便将来可以正确调试问题。如果使用的PDB文件不是使用构建exe的相同代码构建的,那么当您尝试调试dmp时看到的堆栈将是错误的。
答案 1 :(得分:4)
默认情况下,它们会启用,因为:
在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会略大。就是这样。