调试模式或发布模式

Debug mode or Release mode

本文关键字:模式 调试 布模式      更新时间:2023-10-16

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

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

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

编辑:

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

这个问题有四种情况。

1。启动一个新项目并在Debug模式下编程,因为... .

2。启动一个新项目并在发布模式下编程,因为... .

3。在调试模式下工作一段时间,但由于... .

更改为发布模式

4。在发布模式下工作一段时间,但由于... .

更改为调试模式

我很想知道这四个案例的判决结果。我是案例3,由于Bullet Physics的性能,我决定将程序永远设置为发布模式,并将其他调试库重新构建为发布模式。在情况3中,问题是,我只是使用第三方库,所以我是否需要出于任何原因使用调试模式?还是直接进入释放模式?

对于情况1&2,是否有任何决定为什么你让调试模式或发布模式来构建你的新程序?

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

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

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

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

编译。

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

在需要调试某些内容时使用调试(未优化)构建。它们产生的(缓慢的)代码与你的源代码非常匹配,这样你就可以更容易地调试。

为您发布的代码使用发布(优化)构建。它们生成的代码运行速度快了很多(通常是数量级),但是调试优化后的代码真的很困难,因为生成的代码通常与您编写的源代码大不相同。

在同一个程序中以debug/release方式构建的对象混合通常会导致灾难(崩溃)(特别是在microsoft编译器中);所以不要这么做