6

我正在发布模式下构建 VS 2010 的窗口服务 c# 项目。我第一次感到惊讶的是,即使在发布模式下,它也会创建 pdb 文件。附加调试过程后,我无法加载调试符号。

我的问题是,如果我们在调试和发布模式下都有 pdb 文件,那么为什么需要两种编译模式。

4

4 回答 4

6

我的问题是,如果我们在调试和发布模式下都有 pdb 文件,那么为什么需要两种编译模式

调试和发布之间除了 PDB 生成之外还有其他差异。如果您进入 Build 属性并进入“Advanced”,则会生成不同级别的调试信息 - Full、PDB-only 和 None。

此外,还有不同级别的编译时优化,以及不同预处理器符号的存在(例如,每个Debug.Assert存在或不存在)。

当然,您也可以拥有自己的各种构建配置,并提供多种选择。

于 2012-05-06T05:58:22.050 回答
2

存在调试/发布模式的原因有很多,与 PDB 文件的创建无关。

VS 在发布模式下更快地执行你编译的程序。此外,如果您处于调试与发布模式,则有一些编译器指令可以改变程序的行为方式。例如,您可以使用编译器指令来禁用您的顶级try catch块,以便您可以隔离被抛出到特定代码行的异常。

这只是几个例子。简而言之,调试模式的用途远不止为您创建 PDB 文件。

于 2012-05-06T05:56:52.277 回答
1

您可以有两种以上的编译模式。通常,调试和发布意味着你是否想要优化。无论如何,您仍然可以生成调试信息,只有用于发布版本的 PDB 不会有太大帮助。可以排除内联函数、变量等。

于 2012-05-06T05:57:45.390 回答
0

我最近做了一个 winupdate(20120508) 并且 Visual Studio 之后的调试似乎真的很慢,在 compile-to-runDebug 延迟后延迟了 1 分钟,然后当调试程序退出时,又延迟了 1 分钟才能再次控制 Visual Studio。我确实清理了所有东西,但没有快乐。

解决方案:我手动删除了我的项目/解决方案中的 *.sdf 和 *.suo 文件并重新构建。问题神奇地消失了。

不知道为什么,但有些东西不同步、损坏或与更新不兼容,需要手动清除。

于 2012-05-09T18:59:08.857 回答