MFCから来て、プリプロセッサによってリリースビルドから削除されると仮定して、私はqDebug()
のように扱いました(MFCではそれはを使用して行われます)。TRACE()
#define TRACE 1 ? (void*) 0 : AfxTrace
ただし、驚いたことに、qDebug()
リリースビルドでも実行されます。これを変更するにはどうすればよいですか?また、なぜそうなのか、この決定の背後にあるQtの開発者の理由は何でしたか?
qDebug
プリプロセッサによっても制御されますが、独自の特別なマクロがありQT_NO_DEBUG_OUTPUT
ます。これをリリースビルド定義に追加すると、削除されます。
QDebugは「デバッグ情報の出力ストリーム」です。メッセージタイプに応じて、witchがstdout/stderrに出力するデフォルトの動作があります。独自のメッセージハンドラーをインストールすることで、qDebug()の動作を簡単にカスタマイズできます。たとえば、デバッグを出力する場合は、実行時に(コンパイル時ではなく)テストできます。このコードサンプルを見てください:
#include <QDebug>
void noMessageOutput(QtMsgType type, const char *msg)
{
Q_UNUSED(type);
Q_UNUSED(msg);
}
int main(int argc, char * argv[])
{
QApplication app(argc, argv);
if ( ! app.arguments().contains(QLatin1String("--with-debug") ) {
qInstallMsgHandler(noMessageOutput);
}
}
実行時にパラメータが指定されていない場合、qDebug出力全体が非表示になります。「デバッグを表示/デバッグを表示しない」よりも詳細な制御が可能
QT_NO_DEBUG_OUTPUT
また、コード内に存在するqDebugでパフォーマンスが低下することが懸念される場合は、defineを使用してQDebugを完全に無効にすることができます。
これを使用して、リリースモードでメッセージを抑制しますが、デバッグモードでは許可します。
CONFIG(release, debug|release):DEFINES += QT_NO_DEBUG_OUTPUT
DEFINES += QT_NO_DEBUG_OUTPUT
パーツなしでのみ使用する場合はCONFIG(...)
、両方のモードで無効にします。これは通常、望ましくありません。