检测 qt 是不是在运行时运行调试构建

Posted

技术标签:

【中文标题】检测 qt 是不是在运行时运行调试构建【英文标题】:Detect if qt is running a debug build at runtime检测 qt 是否在运行时运行调试构建 【发布时间】:2012-07-27 16:26:50 【问题描述】:

如何在运行时从 QObject 中检测它所链接的 Qt 是调试版本还是发布版本?

我知道QT_NO_DEBUG macro,但这在构建 Qt 时已解决。

这很有用的示例 1:我有一个充当崩溃处理程序的插件,提供回溯。如果 qt 调试符号可用,我只希望这个插件尝试完成所有这些工作。

示例 2:我有一个用 pyqt 编写的命令行参数解析器。它想打印程序帮助。它如何从 pyqt 中确定 QApplication 是否支持 -sync 开关。如果我有关于构建类型的信息,我可以轻松地从程序理解的参数列表中添加或删除 -sync。

【问题讨论】:

您想知道 Qt 库是调试版还是发布版,或者您想知道您的应用程序是在调试版还是发布版中编译? 【参考方案1】:

如果您只是想测试您是在运行您的应用程序的调试版本还是发布版本,请使用QT_DEBUG

#ifdef QT_DEBUG
  qDebug() << "Running a debug build";
#else
  qDebug() << "Running a release build";
#endif

虽然这显然使用了预处理器,而不是在运行时检查。对于您为什么指定要在运行时进行此检查,我有点困惑,因为只能在编译之前做出是否使用调试功能的决定...

我不知道在 Qt4 中有任何简单的方法来检查您要链接的 Qt 库是否已在启用调试的情况下构建(尽管我确实注意到这在 Qt5 中看起来正在发生变化,并添加了 @987654321 @)。

【讨论】:

对问题进行了澄清。 接受您的回答,不是为了宏,而是为了 QLibraryInfo 的花絮。看来我一直在问的许多问题都用 Qt5 解决了,包括这个问题。我承认 Qt4 没有合适的解决方案。【参考方案2】:

接受的答案中的两个提示都是正确的。 Qt5 on macOS 有一个副作用。默认情况下,框架使用其库的发布版本,此方法的结果将始终为“假”值。

【讨论】:

以上是关于检测 qt 是不是在运行时运行调试构建的主要内容,如果未能解决你的问题,请参考以下文章

Qt 程序无法运行

Popen 崩溃 Qt 调试器

发布构建调试问题

Ubuntu16.04下写的Qt程序,调试时没问题,运行时偶现崩溃 (需要在运行时生成core dump文件,QMAKE_CC += -g)

QT 运行构建时不包括正确的库

Qt - 如何将 Qt 运行时 DLL 复制到输出路径