C++ 删除编译器优化并在发行版中启用pdb文件

C++ 删除编译器优化并在发行版中启用pdb文件,c++,qt,qt-creator,C++,Qt,Qt Creator,我有一个qt pro文件,我想在其中禁用优化,因为我看到一些不合理的崩溃。因此,我使用以下选项: QMAKE_CXXFLAGS -= -O1 QMAKE_CXXFLAGS -= -O2 QMAKE_CXXFLAGS -= -O 更重要的是,我需要生成pdb文件,同时在发布模式下构建,以跟踪任何粉碎的后遗症。因此,我在pro文件中使用以下选项: CONFIG += force_debug_info 然而,我在编译过程中看到,由于第二个选项,编译器添加了O2优化。您知道为什么会发生这种情况,以及

我有一个qt pro文件,我想在其中禁用优化,因为我看到一些不合理的崩溃。因此,我使用以下选项:

QMAKE_CXXFLAGS -= -O1
QMAKE_CXXFLAGS -= -O2
QMAKE_CXXFLAGS -= -O
更重要的是,我需要生成pdb文件,同时在发布模式下构建,以跟踪任何粉碎的后遗症。因此,我在pro文件中使用以下选项:

CONFIG += force_debug_info

然而,我在编译过程中看到,由于第二个选项,编译器添加了O2优化。您知道为什么会发生这种情况,以及我如何拥有这两种功能吗?

似乎在使用调试信息构建时,要在pro文件中更新的qmake标志是:

QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO 
因此,我应该写:

QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO -= -O1
QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO -= -O2
QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO -= -O

在您从发布版本中删除优化并添加调试信息后,它与普通调试版本有什么区别?您是否可以展示一个行为不正常的程序?然后,我们也许可以发现您的bug。您不需要禁用优化来生成调试信息(实际上禁用它们可能会让bug消失)。只需使用
-g3
@HolyBlackCat发布版本和调试信息,将为我提供一个发布可执行文件,我可以将其安装在客户端pc上,并在崩溃后创建新转储文件时为我提供要加载的pdb文件。正常的调试需要调试DLL的依赖性,这些依赖性只能在开发环境中找到。@VTT:当然,不需要禁用编译器优化来生成调试信息,我只需要这样做,因为我在启用选项的情况下发生了多起崩溃