visual-studio - Visual Studio : debug information

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

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

最佳答案

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

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

我知道一个指向 .pdb 文件的指针被放入了可执行文件中,但并没有太多。我做了一些实验,发现启用 /OPT:REF 链接器选项将大小差异更改为 10,205,184 与 10,205,696。因此,非 /DEBUG 构建保持相同的大小,但 /DEBUG 构建下降到仅大 512 字节(这可能由指向 .pdb 的指针解释) - 也许链接器会舍入到 512 的倍数或其他东西)。增幅远低于 1%。显然,添加 /DEBUG 会导致链接器保留未引用的对象,除非您还指定了 /OPT:REF。 (IDE 中的“Linker | Optimization | References” 选项)。

如果没有 .pdb 文件,该程序将运行良好 - 如果您想在客户站点提供更好的调试体验,您可以选择将其发送给客户。如果您只是希望能够获得体面的堆栈跟踪,则不需要在客户机器上拥有 .pdb 文件 - 他们(或您提供的某些工具/功能)可以发送可以加载到的转储文件调试器在您的站点上使用可用的 .pdb 文件并获取相同的堆栈跟踪信息端口分析。

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

我能想到的分发 .pdb 文件的唯一缺点是,如果您担心的话,它可以使您的应用程序的逆向工程变得更容易。请注意,Microsoft 为 Windows 分发符号(使用公共(public)符号服务器 - 以及某些特定版本的完整符号集的包)。但是,他们分发的符号确实会经过一个 sanitizer 步骤,该步骤会删除他们认为敏感的某些项目。您可以使用链接器的 /PDBSTRIPPED 选项(IDE 中的"Linker | Debugging | Strip Private Symbols")执行相同(或类似)操作。见 the MSDN documentation有关该选项删除内容的详细信息。如果您要分发符号,则使用该选项可能是合适的。

关于visual-studio - Visual Studio : debug information in release build,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6363991/

相关文章:

logging - 渐变颜色输出

go - 如何正确使用构建标签?

build - 在 CentOS/RHEL 上制作和构建实用程序?

Android Studio - 错误 :Program type already present

android - 使用 log4j 更新 Android Studio 后 gradle 构建出错

java - 在java中构建URL

c++ - 在 Sublime Text 中构建系统

visual-studio-2010 - 项目引用和项目依赖有什么区别?

r - 关于 .Rbuildignore 正确使用 devtools 和/或 RStudio

c++ - 在一个 Eclipse 项目中构建多个二进制文件