在运行时检测Qt是否正在运行调试版本

28
如何在运行时从QObject中检测它链接的Qt是调试版本还是发布版本?我知道QT_NO_DEBUG macro,但这只适用于Qt的构建时。举个例子,当插件作为崩溃处理程序提供回溯时,只有在qt调试符号可用时才希望该插件尝试完成所有这些工作。另一个例子是,在pyqt中编写的命令行参数解析器想要打印程序帮助信息,它应该如何从pyqt中找出QApplication是否支持-sync开关?如果我了解构建类型的信息,就可以轻松地从程序理解的参数列表中添加或删除-sync。

你想知道Qt库是调试版还是发布版,还是想知道你的应用程序是以调试版还是发布版编译的? - Luca Carlon
2个回答

55

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

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

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

据我所知,在Qt4中没有任何简单的方法可以检查您链接的Qt库是否已启用调试(尽管我注意到随着QLibraryInfo::isDebugBuild()的添加,这看起来在Qt5中正在发生改变)。


对问题进行了澄清。 - troy.unrau
2
接受您的答案,不是因为宏,而是因为QLibraryInfo小贴士。看来我提出的许多问题都可以通过Qt5解决,包括这个问题。我会承认,对于Qt4没有适当的解决方案。 - troy.unrau

2

接受答案中的两个提示都是正确的。

在macOS上使用Qt5时有一个副作用。默认情况下,框架使用其库的发布版本,因此此方法的结果始终为“false”值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接