Visual Studio:在发布版本中调试信息

时间:2011-06-15 20:32:30

标签: visual-studio debugging build debug-symbols

我很想在我的发布版本中包含调试信息,这些信息会传递给客户。据我所知,唯一的缺点是二进制文件大小增加了25%。优点是我可以获得一个可立即使用的崩溃转储,更容易分析。 我愿意忍受25%的增长。还有其他缺点吗?

这是一个C项目,我想要做的就是链接/调试/生成调试信息

4 个答案:

答案 0 :(得分:37)

可执行文件的大小应该增加不到25%。

我实际上有点惊讶它增加了很多,但是一些快速测试显示至少有一个大型示例项目(ScummVM)通过添加{{1}将.exe从10,205,184字节增加到10,996,224字节链接步骤的选项(大约增加8%)。使用IDE中的/DEBUG选项指定/DEBUG。请注意,此设置对编译器生成的优化没有影响。

我知道指向.pdb文件的指针放在可执行文件中,但对此并不多。我进行了一些实验,发现启用"Linker | Debugging | Generate Debug Info"链接器选项会将大小差异更改为10,205,184与10,205,696。所以非/OPT:REF版本保持相同的大小,但/DEBUG版本减少到只有512字节(这可以通过指向.pdb的指针来解释 - 也许链接器会转到某个倍数512或者什么)。增幅不到1%。显然,添加/DEBUG会导致链接器保留未引用的对象,除非您还指定/DEBUG。 (IDE中的/OPT:REF选项)。

程序在没有.pdb文件的情况下运行正常 - 如果您想在客户站点提供更好的调试体验,可以选择将其发送给客户。如果您只是希望能够获得合适的堆栈跟踪,则不需要在客户机器上安装.pdb文件 - 它们(或您提供的某些工具/功能)可以发送转储文件,该文件可以加载到在您的站点上使用.pdb文件的调试器,并获得相同的堆栈跟踪信息port-mortem。

当然要注意的一件事是,您需要将.pdb文件与您的版本一起存档。 “Windows调试工具”软件包(现在分发在Windows SDK中)提供了一个符号服务器工具,因此您可以存档.pdbs并轻松检索它们以进行调试。

我可以想到分发.pdb文件的唯一缺点是它可以使您的应用程序的逆向工程更容易,如果这是您的问题。请注意,Microsoft为Windows分发符号(使用公共符号服务器 - 以及某些特定版本的完整符号集的包)。但是,他们分发的符号确实会通过清理步骤来删除他们认为敏感的某些项目。您可以使用链接器的"Linker | Optimization | References"选项(IDE中的/PDBSTRIPPED)执行相同(或类似)操作。有关该选项删除的详细信息,请参阅the MSDN docs。如果您要分发符号,则可能适合使用该选项。

答案 1 :(得分:2)

根据http://msdn.microsoft.com/en-us/library/xe4t6fc1(v=vs.80).aspx的VS2005文档:

  

/ DEBUG将/ OPT选项的默认值从REF更改为NOREF和   从ICF到NOICF(因此,您需要明确指定/ OPT:REF或   / OPT:ICF)

我的情况下,当我同时启用时,它有所帮助:

/O2 /DEBUG /OPT:REF /OPT:ICF

答案 2 :(得分:1)

你没有提到你所使用的语言,C ++与C#可能有不同的答案。

我不是100%肯定你正在考虑做出什么改变。您是否要告诉Visual Studio进行标准的Debug编译,然后发布它,或者您要在Release编译中编辑几个设置?仔细修改Release版本中的几个设置会让我觉得这是最好的方法。

无论你最终如何,我都会确保启用优化,因为这会对编译代码的性能产生重大影响。

答案 3 :(得分:-7)

我总是发出调试版本,而不是发布版本。我无法想到任何缺点,而且正如你所提到的那样有优势。