6

Windows でコンパイルした .exe ファイルがあります。しかし、コマンド ラインから実行すると、プログラムが std::cout または std::cerr に出力するものが何も表示されません。プログラムは実行され、コマンド ラインがプロンプトに戻った後も引き続き実行されます (これは GUI プログラムであり、終了ボタンを押すまで終了しません)。プログラムの出力を確認するにはどうすればよいですか?

cmake を使用して Visual Studio プロジェクトを作成し、それを msbuild でコンパイルしています。

4

4 に答える 4

5

The simplest approach is to rebuild the program as a console application. The option to link.exe needs to be /SUBSYSTEM:CONSOLE instead of /SUBSYSTEM:WINDOWS; presumably there is a straightforward way of specifying this in cmake.

This change shouldn't affect your GUI at all, but it will cause Windows to allocate a console if the process isn't already associated with one. Also, command line shells will usually wait for console applications to exit before continuing.

The other approach is to call AllocConsole to explicitly create a new console, or AttachConsole if you want to use an existing one. Or, of course, you could send the output to a log file.

Additional

Google 検索によると、ソース コードに次の行を追加することで、プログラムをコンソール アプリケーションとしてビルドできます。

#pragma comment(linker, "/SUBSYSTEM:CONSOLE")

これはおそらく最も簡単な解決策です。#ifデバッグビルド用のコンソールのみが必要な場合は、ブロックに入れることができます。

CMake: デバッグ ビルドに異なる ADD_EXECUTABLE を使用する方法も参照してください。

于 2012-05-11T04:22:14.237 に答える
4

出力を表示する 1 つの方法は、次を実行することです。

program.exe > output.txt 

次に、そのファイルの出力を監視します。または、パイプを使用して表示します。

program.exe | find /v ""

エラー出力も監視するには、使用できます

program.exe > output.txt 2>&1

program.exe 2>&1 | find /v ""

私は、想像力に多くを残したMicrosoftのドキュメントと、より実用的な例hereおよびhereに基づいてそれを理解しました。

これは、自分の (および他の人々の) Windows アプリケーションからの「隠された」stdout および stderr メッセージを表示するのに役立ちます。一部のプログラムにどのようなメッセージが残されているかを確認するのは興味深いことですが、通常は表示されません。

于 2016-03-03T17:29:54.510 に答える
0

Windows はデュアル モードをサポートしていません。つまり、GUI を実行すると、アプリを実行するコンソールに出力を取得できません。

于 2012-05-11T02:15:25.733 に答える