【发布时间】: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