cout
私は C++ で Windows アプリケーションに取り組んでおり、デバッグ目的で使用したいと考えています。
の影響cout
が隠されているようですが、コンソール ウィンドウを開いてデバッグ情報を表示できるようにする構成オプションはありますか?
6 に答える
いくつかの合理的なオプションがあります。1つは、エントリポイントの名前をからに変更することです。これWinMain
により、エントリポイントmain
はコンソールアプリケーションとして構築されます。それでも、次のようなものを使用できRegisterClass
ますCreateWindow
。
明らかな代替手段は、OutputDebugString
の代わりに使用することですcout
。そこからの出力は、デバッガー、またはそれが生成するものを表示するために特別に構築された任意の数のプログラム(基本的には他のデバッグ機能を提供しないミニデバッガー)に表示されます。
私があまり合理的ではないと思う3番目の解決策はAllocConsole
、コンソールを割り当てるために呼び出してから、それに書き込むことです。WriteFile
Windowsネイティブのコンソール機能( 、WriteConsoleOutput
など)を使用してすべての書き込みを行うことを気にしないのであれば、それで問題ありません。残念ながら、コンソールで動作するようにC ++ストリームを初期化しないため、コンソールを指すファイルストリームを開くか、コンソールのストリームライブラリを初期化する(文書化されていない)関数を見つけて使用する必要があります。これは機能させることができますが、移植性のないコードを書くために余分な作業を行うことになり、それを補うための利点はほとんどありません(この場合、「移植性のない」には、同じコンパイラの他のバージョン、少なくともライブラリの初期化関数を呼び出す場合)。
コンソール ウィンドウを GUI アプリケーションに追加するには、AllocConsole
API を使用できます。
次に、特別なファイル名を開いて"CONOUT$"
、ストリームをそれに添付するだけです(cout
、cerr
、など)
MSDN のこの説明を参照してください。
これを行う最も簡単な方法は、コンソール アプリケーションを最初から開始することです。
VisualStudio で、[ファイル] > [新しいプロジェクト] をクリックします。Win32 コンソール アプリケーションを選択します。さまざまなオプションを選択して、新しいプロジェクトを作成します。
Win32コンソール アプリケーションと表示されていますが、制限なく x64 ビルドを作成できることに注意してください。
この時点で、アプリケーション シェルができています。既にコードがあり、それをこの新しいプロジェクトに取り込みたい場合は、 [プロジェクト] > [既存の項目を追加...]を実行し、プロジェクトに含めるファイルを選択します。
GUI プログラムからコンソールを管理するのは非常に面倒なので、別の方法で管理することをお勧めします。たとえば、メッセージをリアルタイムで表示する必要がある場合は、メッセージをウィンドウに表示します。そうでない場合は、それらをファイルに書き込みます。
使用するだけOutputDebugString()
ですが、文字セットをマルチバイトに設定することを忘れないでください。そうしたくない場合は、次のようにコードを記述できます。
// with multibyte character set:
OutputDebugString("Failed to do something");
// without multibyte character set:
OutputDebugString(L"Failed to do something");