web-dev-qa-db-ja.com

qtが実行時にデバッグビルドを実行しているかどうかを検出します

リンク先のQtがデバッグビルドまたはリリースビルドであるかどうかを、実行時にQObject内からどのように検出できますか?

QT_NO_DEBUGマクロ については知っていますが、Qtのビルド時に解決されます。

これが役立つ場合の例1:クラッシュハンドラーとして機能し、バックトレースを提供するプラグインがあります。 qtデバッグシンボルが利用可能な場合にのみ、このプラグインがこのすべての作業を実行しようとします。

例2:pyqtで記述されたコマンドライン引数パーサーがあります。プログラムヘルプを印刷したい。 QApplicationがpyqt内から-syncスイッチをサポートするかどうかをどのように確認しますか。ビルドタイプに関する情報があれば、プログラムが理解できる引数のリストから-syncを簡単に追加または削除できます。

19
troy.unrau

アプリケーションのデバッグビルドまたはリリースビルドを実行しているかどうかをテストするだけの場合は、_QT_DEBUG_を使用します。

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

これは明らかに実行時にチェックするのではなく、プリプロセッサを使用しますが。デバッグ機能の有無にかかわらずビルドするかどうかの決定はコンパイル前にのみ行うことができるため、実行時にこのチェックを行うように指定した理由について少し混乱しています...

リンク先のQtライブラリがデバッグを有効にして構築されているかどうかを確認するQt4の簡単な方法を知りません(ただし、Qt5では QLibraryInfo::isDebugBuild() )。

36
sam-w

受け入れられた答えの両方のヒントは真実です。 macOSのQt5 には1つの副作用があります。デフォルトでは、フレームワークはそのライブラリのリリースバージョンを使用し、このメソッドの結果は常に「false」値になります。

1
Ľubomír Carik