VS解决方案配置Debug和Release选项
前言
本文章基于VisualStudio2017编写
前两天腾讯电话面试中面试官问到既然平时有使用VS进行项目调试,那介绍一下VS中Debug选项和Release选项有什么不同,我听到这问题时,知道Debug选项是我们平时使用VS要开始运行时点的那一个按钮:
但是这个release是真的没有注意到过,我甚至都不确定面试官说的英文单词是什么。于是非常尴尬地,我跟面试官重复了好几次 “啊?release?” “re–lea–se?” 这个问题在我表示不理解后作罢…
今天在用VS调试数据挖掘的线性回归作业,这个每次运行都要读取25000*384个csv文件中的数据,并且对这些数据进行梯度下降算法计算,每次迭代都要遍历这个规模的数据的程序,运行一次下来就要半个多小时时间。某次调试时,我注意到debug按钮旁貌似有个下拉菜单,展开后,前几天我感觉云里雾里的”Release”静静躺在其中。
我先是想起前几天面试被问到的这个问题后,google了Debug和Release的不同,简单地浏览到Debug是方便debug调试的,而Release是能优化程序运行的之后,出于试验目的选择了Release选项运行程序。
这个原本在Debug配置下要运行半个小时的程序,使用Release配置,竟用了10S钟就完成了运行…
引用Jessie J在听到呼麦后的评论:“I’m absolutely shocked, but in a great way.”
这两个选项是什么?
“Debug” and “Release” are actually just two labels for a whole slew of settings that can affect your build and debugging.
Debug选项和Release选项实际上是为一系列极多能影响程序的build和debugging的配置的标签/名字。(这两个配置选项的不同贯穿整个窗口,不止是优化配置不同)
当你选择了不同的运行选项,用来运行你的程序的配置就会不同,由此程序运行的效果就会受到影响。
它们有什么区别?
Debug选项称为调试版本,顾名思义这个选项是调试的时候使用的。这个选项的配置中,所有代码生成的优化都是关闭的,于是我们触发断点后可以通过即时/局部变量窗口来观察对应的变量。
Program Debug Database files, which allow you to follow the execution of the program quite closely in the source during run-time.
All optimizations turned off, which allows you to inspect the value of variables and trace into functions that might otherwise have been optimized away or in-lined
A _DEBUG preprocessor definition that allows you to write code that acts differently in debug mode compared to release, for example to instrument ASSERTs that should only be used while debugging
Linking to libraries that have also been compiled with debugging options on, which are usually not deployed to actual customers (for reasons of size and security
Release选项称为发布版本,这个选项的配置使得编译器可以对我们的代码进行低等级的,复杂的优化。优化后代码可能会”面目全非“,导致单步调试变得不可行,我们也无法在变量窗口中看到变量,因为我们要观察的变量可能被优化了。并且发布版本不会生成.PDB文件(.PDB文件让调试器能知汇编指令与代码行数之间的对应关系)
总之
需要调试程序时,选用Debug选项
需要程序快速运行时,选用Release选项