24

MFCから来て、プリプロセッサによってリリースビルドから削除されると仮定して、私はqDebug()のように扱いました(MFCではそれはを使用して行われます)。TRACE()#define TRACE 1 ? (void*) 0 : AfxTrace

ただし、驚いたことに、qDebug()リリースビルドでも実行されます。これを変更するにはどうすればよいですか?また、なぜそうなのか、この決定の背後にあるQtの開発者の理由は何でしたか?

4

3 に答える 3

28

qDebugプリプロセッサによっても制御されますが、独自の特別なマクロがありQT_NO_DEBUG_OUTPUTます。これをリリースビルド定義に追加すると、削除されます。

于 2012-11-21T13:47:31.700 に答える
16

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を完全に無効にすることができます。

于 2012-11-21T13:51:54.263 に答える
3

これを使用して、リリースモードでメッセージを抑制しますが、デバッグモードでは許可します。

CONFIG(release, debug|release):DEFINES += QT_NO_DEBUG_OUTPUT

DEFINES += QT_NO_DEBUG_OUTPUTパーツなしでのみ使用する場合はCONFIG(...)、両方のモードで無効にします。これは通常、望ましくありません。

于 2018-02-10T12:12:34.033 に答える