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

Posted

技术标签:

【中文标题】删除编译器优化并在发行版中启用 pdb 文件【英文标题】:Remove compiler optimizations and enable pdb files in release 【发布时间】:2018-06-15 20:06:54 【问题描述】:

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

QMAKE_CXXFLAGS -= -O1
QMAKE_CXXFLAGS -= -O2
QMAKE_CXXFLAGS -= -O

更重要的是,我需要生成 pdb 文件,同时在发布模式下构建,以跟踪任何暗恋的后记。因此,我在我的专业文件中使用以下选项:

CONFIG += force_debug_info

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

【问题讨论】:

从发布构建中删除优化并添加调试信息后,它与普通调试构建有什么区别? 您能否显示一个行为不端程序的minimal reproducible example?那么我们也许能够发现你的错误。 您不需要禁用优化来生成调试信息(实际上禁用它们可能会让错误消失)。只需使用-g3 @HolyBlackCat 带有调试信息的发布版本将为我提供一个发布可执行文件,我可以将其安装在我们的客户端 PC 上,并在创建新转储文件后给我 pdb 文件以加载碰撞。正常的调试需要依赖调试 dll,这些依赖只能在开发环境中找到。 @VTT:当然没有必要禁用编译器优化来生成调试信息,我只需要这样做,因为我有几次崩溃,选项启用了选项 【参考方案1】:

似乎在使用调试信息构建时,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

【讨论】:

以上是关于删除编译器优化并在发行版中启用 pdb 文件的主要内容,如果未能解决你的问题,请参考以下文章

Mono 发行版中的 C# 编译器版本是不是与 Mono 版本相同?

Maven项目提示:源值1.5已经过时,将在未来发行版中删除

在 VS2013 中编译 ASP.NET MVC 项目在发行版中不起作用

什么是一 .pdb 文件?

Error:(16, 16) 警告: BASE64Decoder是内部专用 API, 可能会在未来发行版中删除

C++ 调试问题 - pdb 文件