在发布模式下调试的缺点

Posted

技术标签:

【中文标题】在发布模式下调试的缺点【英文标题】:The cons of debugging in release mode 【发布时间】:2016-12-27 17:13:31 【问题描述】:

在发布模式下使用 Visual Studio 调试本机 C++ 程序有什么缺点?我为什么要设置两种不同的模式而不是简单地在发布模式下调试呢?

在发布模式下调试,我的意思是在设置所有需要的配置之后(生成调试信息、禁用优化和增量链接...)

换句话说,为什么我应该有一个调试模式,我必须将我的项目链接到任何第三方的调试版本,而我可以简单地将我的发布模式更改为“发布模式的可调试版本”(假设我这样做不想在调试我的应用程序时挖掘第三个库)

【问题讨论】:

【参考方案1】:

如果您 a) 生成调试信息 b) 禁用优化,那么这几乎不是发布模式。它是未启用 _DEBUG 的调试模式。

有些人在纯调试和仅发布的基础上定义了第三个构建配置,正是为了调试有时在仅发布时弹出的问题。

唉,仅发布版本中出现的问题类型往往是由优化引起的,因此这种构建的用途有限。但如果它适合你,没有什么能阻止你使用它。

只是_DEBUG应该会导致日志中发出额外的信息,当然还要检查断言,这两者在正常情况下对于开发来说都是必不可少的。所以,不要把“调试”模式严格地认为是“调试”,而实际上是“开发”模式。

拥有不同构建的目的是让您不必一直弄乱它们的配置。您只需配置您想要的构建,然后您就忘记了它们。如果您出于调试目的修改发布版本,那么下次您想将新版本发送到户外时,您将不得不撤消这些修改并重新构建一个新的“真实”发布模式版本。你不想这样做。

此外,第三方库的 _DEBUG 模式可能会生成日志,这可能对您进行调试很有用,但最重要的是,它可能还会执行额外的输入参数检查,这对于开发健壮的软件是绝对不可缺少的。因此,您不希望在不处于 _DEBUG 模式的第三方库上进行开发。

【讨论】:

谢谢... "发布模式的可调试版本" 拥有不同构建的目的是让您不必一直弄乱它们的配置。您只需配置您想要的构建,然后您就忘记了它们。每次您想将新版本发送到户外时,您都不会弄乱配置。 另外,第三方库的_DEBUG模式可能会产生日志,可能对你调试有用,它还可能执行额外的输入参数检查,这对于开发健壮的软件是绝对不可缺少的,所以你不想在不处于 _DEBUG 模式的第三方库上进行开发。【参考方案2】:

您缺少调试运行时库!这将检查运行时的参数是否不正确,这种错误可能会导致发布运行时出现无法解释的崩溃。

【讨论】:

以上是关于在发布模式下调试的缺点的主要内容,如果未能解决你的问题,请参考以下文章

AdaGide:调试模式和发布模式

为啥我的应用程序在发布模式下崩溃但在调试模式下不崩溃?

在发布模式下崩溃但在调试模式下不崩溃的 ActiveX 控件

Webservice 在调试模式下工作,但不在发布模式下

iOS学习之MVC,MVVM,MVP模式优缺点

我的代码在调试模式下工作,但不在发布模式下