[解決済み] qDebug, qWarning, qCriticalなどの出力をリダイレクトするには?
2023-02-07 23:10:55
質問
私は、たくさんの
qDebug() <<
ステートメントを使用しています。シェルスクリプトに頼ることなく、デバッグ出力をファイルにリダイレクトできるクロスプラットフォームな方法はないでしょうか?私が推測しているのは
open()
と
dup2()
は、Linuxで仕事をしますが、WindowsでMinGWでコンパイルされたものは動作するのでしょうか?
そして、多分、それをするためのQtの方法があります?
どのように解決するのですか?
メッセージハンドラのインストールは
qInstallMsgHandler
関数を使用し、次に
QTextStream
を記述することで
デバッグ
メッセージをファイルに書き出すことができます。以下はそのサンプルです。
#include <QtGlobal>
#include <stdio.h>
#include <stdlib.h>
void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
QByteArray localMsg = msg.toLocal8Bit();
switch (type) {
case QtDebugMsg:
fprintf(stderr, "Debug: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
break;
case QtInfoMsg:
fprintf(stderr, "Info: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
break;
case QtWarningMsg:
fprintf(stderr, "Warning: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
break;
case QtCriticalMsg:
fprintf(stderr, "Critical: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
break;
case QtFatalMsg:
fprintf(stderr, "Fatal: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
abort();
}
}
int main(int argc, char **argv)
{
qInstallMessageHandler(myMessageOutput); // Install the handler
QApplication app(argc, argv);
...
return app.exec();
}
のドキュメントから引用した。
qInstallMsgHandler
(のドキュメントから引用しました(私はコメントのみ追加しました)。
上記の例では、関数
myMessageOutput
は
stderr
を使っていますが、これは他のファイルストリームに置き換えるか、関数を完全に書き直した方が良いでしょう!
この関数を書いてインストールすると、あなたのすべての
qDebug
(と同じように
qWarning
,
qCritical
など) のメッセージは、ハンドラで書き込んだファイルにリダイレクトされるでしょう。
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] Node.jsアプリケーションをデバッグするにはどうすればよいですか?
-
[解決済み] Node.js の console.log() で '[Object]' ではなく、完全なオブジェクトを取得するにはどうすればよいですか?
-
[解決済み] Visual Studioの出力ウィンドウに書き込む
-
[解決済み] 1サイクルあたり4FLOPの理論上の最大値を達成するにはどうすればよいですか?
-
[解決済み] プリプロセッサのマクロからプラットフォーム/コンパイラを識別するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】coutはstdのメンバではない
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み] 配列のベクトルを扱う正しい方法