调试模式或发布模式

时间:2016-11-13 15:25:58

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

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

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

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

修改

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

这个问题有四种情况。

案例1。由于......开始一个新项目并在调试模式下编程。

案例2。由于......开始新项目并在发布模式下进行编程。

案例3。在调试模式下工作一段时间,但因......而改为发布模式。

案例4。在发布模式下工作一段时间,但由于......而改为调试模式。

我真的想知道这四种情况下的决定是什么。在案例3中,由于Bullet Physics的性能,我决定让程序永远处于发布模式,并使其他调试库重建为发布模式。在案例3中,问题是,我只使用第三方库,所以我是否需要使用调试模式?或者我只是去发布模式?

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

对于案例4,我想不出为什么要让一个人将Release模式更改为Debug模式,但是可能有实际情况?除了建立你可以做出这个决定的库。

如果我的问题不够明确,请告诉我。

2 个答案:

答案 0 :(得分:1)

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

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

进行编译

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

答案 1 :(得分:0)

当您需要调试某些内容时,请使用调试(未优化)构建。它们生成(慢)代码,与您的源密切匹配,以便您可以更轻松地进行调试。

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

在同一程序中混合构建为调试/发布的对象通常是灾难(崩溃)的接收者(特别是使用微软编译器);所以不要那样做。