【问题标题】:Debug mode or Release mode调试模式或发布模式
【发布时间】:2017-03-27 07:22:46
【问题描述】:

最近,我正在努力将物理引擎集成到我的图形引擎程序中。在此之前,我总是在 Debug 模式下构建我的程序,因为我觉得 Debug 意味着安全和更多信息,让我知道哪里出了问题。

在我的程序中,我在 Release 模式下构建了 Assimp,但直到现在我仍然在 Debug 模式下使用它。现在,我在 Release 模式下构建 Bullet Physics,因为在 Debug 模式下性能有很大不同。如果你想知道它有多慢,你可以看到this

重要的是我无法在调试模式下使用这个 *.lib 文件,所以我有一个问题,您何时或为什么从调试模式或另一方面更改为发布模式强>。或者在调试模式下使用发布库?目前,我认为我需要将 Bullet Physics 永久更改为 Release 模式,不知道这是好是坏。

编辑:

我知道发布和调试模式的好处,因为在stackoverflow中有很多可能的重复文章,但我想知道的是当你做一个程序时选择什么决定或者仅仅因为遇到性能问题所以需要像我一样将程序重建为发布模式。我只是想澄清一下可能重复的文章之间的一些不同:)

这个问题有四种情况。

案例 1. 开始一个新项目并在 Debug 模式下编程,因为...。

案例 2. 开始一个新项目并在 Release 模式下编程,因为...。

案例3。在Debug模式下工作了一段时间,但因为...而改为Release模式。

案例4。在Release模式下工作了一段时间,但因为...而改为Debug模式。

我真的很想知道这四种情况下的决定。我是案例3,由于Bullet Physics的性能,我决定让程序永远处于发布模式,同时让其他调试库重建为发布模式。案例3,问题是,我只是使用第三方库,所以我需要使用Debug模式吗?还是我直接进入发布模式?

对于案例 1 和 2,您是否决定让调试模式或发布模式来构建新程序。

对于案例4,我想不出为什么要让一个人将Release模式更改为Debug模式,但也许有一个实际案例?除了构建库之外,您可以做出这个决定。

如果我的问题不够清楚,请告诉我。

【问题讨论】:

  • 始终从调试版本开始,以消除代码中的错误。然后您需要测试 Release 版本,以验证您最初选择 C++ 的原因。您需要使用完整的预期数据集检查您的程序是否具有足够的性能。如果不是,那么您需要一个分析器来查找热点。始终部署发布版本。
  • 像 gdb、lldb、Visual Debugger 这样的调试器在发布模式下很难使用——一些函数丢失(内联)并且指令重新排序使它们在步进命令上向前和向后跳转。由于调试器是查找错误的非常有效的工具,因此最好从调试模式开始,除非您打算不使用它们。
  • 还值得注意的是,当相同的错误代码可能导致程序在发布版本中崩溃时,调试版本往往会默默地处理某些类别的未定义行为,因此密集测试几乎应该只在发布版本上进行.
  • @Tokenyet,这个问题呢?请您分享有关此问题的最新信息吗?

标签: c++ visual-studio debugging conditional-compilation


【解决方案1】:

“调试模式”和“发布模式”是两组预定义的编译器开关。但是,您可以覆盖它们,并创建中间表单。 C++ 通常从内联中受益匪浅,因此带有内联的调试构建是一种合理的中间形式。另一个常见的变化是即使在调试版本中也使用 C 和 C++ 库的发布版本。

您甚至可以覆盖单个文件级别的开关。你的子弹物理可能是正确的,所以你可能想检查它们是否可以用

也就是说,在处理不同的问题时,在调试模式和发布模式之间切换是很常见的。

【讨论】:

    【解决方案2】:

    当您需要调试某些东西时,使用调试(未优化)构建。它们生成的(慢)代码与您的源代码非常匹配,因此您可以更轻松地进行调试。

    为您发布的代码使用发布(优化)版本。它们生成的代码运行速度更快(通常是数量级),但调试优化代码确实很困难,因为生成的代码通常与您编写的源代码完全不同。

    在同一程序中混合以调试/发布方式构建的对象通常会导致灾难(崩溃)(尤其是使用 Microsoft 的编译器);所以不要那样做。

    【讨论】:

    • 请注意,Microsoft 编译器提出了一种“RelWithDebInfo”模式,您可以在该模式下获得(部分)可调试的优化代码。
    猜你喜欢
    • 1970-01-01
    • 2021-02-08
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 2014-02-18
    • 2014-11-07
    • 2013-06-22
    相关资源
    最近更新 更多