2025年1月15日 星期三

Qt C++ 印出debug msg的幾種方法

在直接執行可執行檔時,若想同時印出 Debug 訊息(例如在 Qt 中),你有幾種方法來實現這一需求。這些方法將幫助你在應用程式運行時進行除錯和輸出調試訊息。

1. 使用 qDebug() 印出 Debug 訊息

在 Qt 中,你可以使用 qDebug() 函數來輸出除錯訊息。這樣的訊息會印在標準輸出中(通常是控制台或終端機)。

#include <QDebug>
int main(int argc, char *argv[]) { qDebug() << "這是一條 Debug 訊息"; return 0; }

這樣,在執行你的程式時,控制台會顯示:

這是一條 Debug 訊息

2. 使用 QLoggingCategory 設定條件式 Debug 訊息輸出

你也可以使用 QLoggingCategory 來控制哪些訊息會被輸出。這樣你可以更精細地控制哪一類型的訊息會被顯示出來。

首先,定義你的 QLoggingCategory

#include <QLoggingCategory>
Q_LOGGING_CATEGORY(myCategory, "com.mycompany.mycategory") int main(int argc, char *argv[]) { qCDebug(myCategory) << "這是條 Debug 訊息"; qCInfo(myCategory) << "這是條 Info 訊息"; qCWarning(myCategory) << "這是條 Warning 訊息"; qCCritical(myCategory) << "這是條 Critical 訊息"; return 0; }

接著,在執行程式時可以設定是否啟用這些類別的訊息輸出。假設你的程式是以控制台執行,你可以在命令列中設定:

set QML_LOGGING_CATEGORY=com.mycompany.mycategory.debug=true

這會在運行程式時顯示你的 qCDebug(myCategory) 訊息。

3. 在 .pro 檔案中啟用 DEBUG 模式

如果你希望在執行檔案時印出 Debug 訊息,並且這些訊息只在 Debug 模式下顯示,你可以在 .pro 檔案中設定 CONFIG(debug)。這樣只有在 Debug 模式下,qDebug() 或其他調試相關的代碼才會生效。

例如,在 .pro 檔案中加上:

CONFIG += debug

這樣,你可以在 Debug 模式下啟用訊息印出,而在 Release 模式下不顯示。

4. 使用 QTextStreamstd::cout 直接輸出

如果你想用更基本的 C++ 方法來輸出 Debug 訊息,可以使用 std::coutQTextStream

#include <QTextStream>
int main(int argc, char *argv[]) { QTextStream(stdout) << "這是一條 Debug 訊息" << endl; return 0; }

這會在控制台中直接顯示 這是一條 Debug 訊息

5. 使用 qInstallMessageHandler 控制訊息輸出

如果你需要更細緻的控制,你可以使用 qInstallMessageHandler 來定制訊息處理行為。你可以定義一個自訂的訊息處理函數,來控制哪些訊息會被輸出。

例如:

#include <QCoreApplication>
#include <QDebug> void customMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg) { // 根據不同的訊息類型決定如何處理訊息 if (type == QtDebugMsg) { qDebug() << "Debug訊息: " << msg; } } int main(int argc, char *argv[]) { qInstallMessageHandler(customMessageHandler); qDebug() << "這是一條 Debug 訊息"; return 0; }

這樣,所有 qDebug() 輸出的訊息會被 customMessageHandler 處理,你可以在處理器中指定如何輸出訊息或將它們寫入檔案等。

6. 在執行時同時顯示訊息和運行程式

如果你需要在執行程式時能夠顯示調試訊息,並且希望程式繼續運行,你可以使用 qDebug() 或其他類似的功能並將輸出定向到控制台中:

qDebug() << "執行時的 Debug 訊息";

這會讓你在直接執行執行檔時看到 Debug 訊息。你只需要在控制台中執行應用程式,就能在終端機中看到這些訊息。


總結

  1. 使用 qDebug() 來輸出調試訊息。
  2. 使用 QLoggingCategory 來進行條件性的訊息輸出,並控制哪些訊息被顯示。
  3. 可以使用 .pro 檔案來指定在 Debug 模式下輸出訊息。
  4. 若需要在執行時顯示訊息,則 qDebug()std::cout 是最簡單的方式。
  5. 使用 qInstallMessageHandler() 來自定義訊息處理函數,進一步控制訊息輸出。

沒有留言:

張貼留言