Visual Studio中的“调试”和“发布”之间有什么区别?
Visual Studio中的“调试”和“发布”之间有什么区别?
Answers:
最重要的是,在调试模式下没有优化,而在发布模式下有优化。这很重要,因为编译器非常先进,可以对您的代码进行一些非常棘手的低级改进。结果,您的某些代码行可能根本没有任何指令,或者有些代码可能会混在一起。分步调试将是不可能的。另外,局部变量通常以神秘的方式进行优化,因此Watches和QuickWatches通常不起作用,因为变量已“被优化”。并且还有许多其他优化。尝试在某个时候调试优化的.NET代码,您会看到的。
另一个主要区别在于,因此,默认的Release设置不会产生大量的调试符号信息。那是您可能已经注意到的.PDB文件,它使调试器可以找出哪些汇编指令对应于哪一行代码,等等。
实际上,“ Debug”和“ Release”只是整个设置中可能影响构建和调试的两个标签。
在“调试”模式下,通常具有以下内容:
在“发布”模式下,将启用优化(尽管有多个可用选项),并且未定义_DEBUG预处理程序定义。通常,您仍然会想要生成PDB文件,因为当事情运行得更快时,能够在发布模式下进行“调试”非常有用。
通常,调试包含许多额外的信息,这些信息在调试时非常有用。在发布模式下,所有这些都被削减并以性能为代价。
这也许值得一提的非常明显,即构建标志允许其不同的逻辑应该被用来只是为了改变日志和“控制台”的消息,但它可以被滥用,并极大地改变不仅仅是低的水平,但是实际的业务逻辑。
当我开发从现有Release构建配置复制的应用程序时,我也对这个问题感到好奇。
我有一个开发人员,他对在调试模式下使用该应用程序很感兴趣,因此我想知道要使该构建配置具有从Release配置复制的ReleaseMyBuild名称是什么(因此应该将所有设置用于发布优化)。 ),尽管构建配置名称令人困惑,但还是突然改变了团队并成为调试构建。
我认为项目配置只是一个名称,是选择Joris Timmermans提到的“全部设置”的便捷方法。我想知道这些设置的实质内容,这些设置可以使名为“ FOO”的构建配置用作优化的发行版。
这是其中的一瞥。我从Visual Studio 2010的空项目模板中创建了一个新的VCXPROJ。然后复制并进行了编辑,第一个保留调试内容,第二个保留发行内容。这是有关差异的差异...
释放
<PropertyGroup>
<WholeProgramOptimization>true</WholeProgramOptimization>
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
调试
<PropertyGroup>
<UseDebugLibraries>true</UseDebugLibraries>`
<ClCompile>
<Optimization>Disabled</Optimization>
有趣的是,在“链接”部分中,它们都GenerateDebugInformation
设置为true。