Visual Studioの出力ウィンドウへの書き込み


605

デバッグのために出力ウィンドウにメッセージを書き込もうとしています。Javaのような関数を検索しましたsystem.out.println("")。私が試したDebug.WriteConsole.WriteTrace.Write。エラーは発生しませんが、何も出力されません。

「DEFBUG定数の定義」および「TRACE定数の定義」オプションがチェックされています。

メニューツールオプションデバッグ「すべての出力ウィンドウテキストをイミディエイトウィンドウにリダイレクトする」オプションはチェックされていません。

構成:アクティブ(デバッグ)

注:必要に応じて、「Windowsフォームアプリケーション」としてウィザードを使用してプロジェクトを作成しました。どこを見ればいいのか分かりません。


32
使用してみてくださいDebug.WriteLine()
Nikson Kanti Paul 2012

9
これは古い投稿なので、質問を見つけた人へのコメントとして追加します。実際にコードを変更する代わりに、トレースポイントと呼ばれる特別なブレークポイントを使用することもできます。MSDNドキュメントを
Wonko the Sane

13
Debug.WriteLine()は、Debugで実行されている場合にのみ機能することを思い出してください。つまり、CTRL-F5ではなくF5で実行するということです。これは見逃しやすいです。
kirk.burleson 2013

3
それは本当ですが、便利なツールはDebugViewで、デバッガーの外部で実行しているときにデバッグストリームへのすべての出力を表示します
the_mandrill

2
Visual Studioテストフレームワークで実行されている単体テストからの出力を書き込もうとしている場合、ルールは少し異なります。詳細については、この回答を参照してください。
ヨーヨー

回答:


754

System.Diagnostics名前空間を追加するDebug.WriteLine()と、IDEの出力ウィンドウにメッセージをすばやく印刷できます。詳細については、以下を参照してください。


2
ありがとうございました。デバッグなしで開始した場合(ctrl-f5)、出力に書き込む方法がないと思いますか?
previous_developer

1
:私はあなたがこのために探していると思いますstackoverflow.com/questions/562590/...
Bhargav Bhatさん

改めて感謝しますが、それは私にはうまくいきません。TRACE定数が定義されている場合でも、トレースはデバッグモードなしでは印刷されません。
previous_developer

ここで小さなアプリを実行しただけで、うまく動作しました。おそらく、環境に小さな不具合がありますか?
Bhargav Bhat

1
これは私のテストコードです。pastebin.com/b7P0bYEa非常にシンプルですが、まだ何もありません。別のシステムで試してみます。
previous_developer

154

これは、デバッグ出力ウィンドウに書き込みます。

using System.Diagnostics;

Debug.WriteLine("Send to debug output.");

6
私にとって、これはイミディエイトウィンドウへの「出力」
nuander

一連の単体テストでこれを試しました。選択したテストをデバッグしましたが、デバッグウィンドウに出力しようとしたものは何もありませんでした。
フランクH.

ただし、これはデバッグウィンドウに出力しますが、Webページを閉じた後にのみ表示されます。コードを実行するとすぐに表示されますか。少し待ってください-コードの実行中は出力ウィンドウが非表示になっていることがわかりました。ウィンドウを表示すると、出力が表示されます。
ジョーコットン

デバッグウィンドウに出力されたこのメッセージのログを保持できますか?または、Visual Studioはデバッグウィンドウのログにアクセスする方法を提供しますか?
Anmol Rathod


55
Debug.WriteLine

あなたが探しているものです。

そうでない場合は、これを試してください:

メニューツールオプションデバッグ → [ 出力をイミディエイトに送信]のチェック外します。


1
おそらくDebug.Write()がキャリッジリターンを挿入していないため、メッセージがバッファリングされていますか?
ガイスターバック

2
Micahが言ったことを行うまで、Debug.WriteLine( "String")は表示されませんでした。Tools|Options|Debugging uncheck Send Output to Immediate
Skindeep2366 2013

3
それ以降のバージョンでは、チェックボックスは「すべての出力ウィンドウテキストをイミディエイトウィンドウにリダイレクトする」だと思います
Houdini Sutherland

6
VS 2015では、「すべての出力ウィンドウのテキストをイミディエイトウィンドウにリダイレクトします」と呼ばれています。適切な設定を見つけるために5分間探す必要があった場合もあります:)-上下にスクロールして、「送信... ":)
dba

22

私にとっては、Trace名前空間だけが機能し、Debug名前空間は機能しませんでした。

System.Diagnostics.Trace.WriteLine("message");

Visual Studio 2010のC#プロジェクトで作業しています。


2
私はVS 2013 Professionalを使用しており、Visual Studio単体テストフレームワークを使用して単体テストから出力を取得しようとしています。テストハーネスはDebug.WriteLineをキャプチャしてリダイレクトしますが、Trace.WriteLineはリダイレクトしません。また、テストをデバッグする(実行するだけではない)場合を除いて、トレース出力も表示されません。
ヨーヨー

15

あなたが探している可能性があります

MessageBox.Show()

または

Debug.Writeline()

8
MessageBox.Show()デバッグのために複数の値を書きたい場合は、非常に煩わしいかもしれません。
認知症2015

4
質問は「Visual Studioの出力ウィンドウに書き込み中ですか?」でした。メッセージボックスではありません。
Auit Touitou 16

@AmirTwitoメッセージボックスは出力ウィンドウです。
ProfK 2016

4
はい、そうですが、質問は「Visual Studioの出力ウィンドウに書き込み中ですか?」このコードを使用した単純なメッセージボックスではありません:MessageBox.Show()
Amir Touitou

4
@ProfK Visual Studio出力ウィンドウは、特定のプログラムの非常に特定のGUI要素であり、それにMessageBox.Showは書き込みません。
jpmc26

9

呼び出し

System.Diagnostics.Debug.WriteLine("message");

.NET Core(V 1.0または1.1)で作業すると失敗します

からロガーを作成して使用することになっていますMicrosoft.Extensions.Loggingが、そのログはdotnet.exeポップアップコンソールウィンドウにのみ表示され、Visual Studioの出力ウィンドウには表示されません。


したがって、Debug.WriteLine()、Console.WriteLine()、およびTrace.WriteLine()は、.Net Coreの出力に何も出力していませんか?Logclassを作成せずに、ある種の単純なロギングを使用する方法はありますか?[ツール]> [オプション]> [デバッグ]を検索し、可能な解決策について[出力の表示:]を確認しました。
Wouter Vanherck、2018年

4

これにはサードパーティのフレームワーク、つまりSerilogが必要ですが、それでも、出力を私が見ることができる場所に取得することは非常にスムーズな経験であることがわかりました。

最初にSerilogのTraceシンクをインストールする必要があります。インストールしたら、次のようにロガーを設定する必要があります。

Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Trace()
    .CreateLogger();

(別の最小レベルを設定するか、設定値または通常のSerilog機能のいずれかに設定できます。Traceロガーを特定のレベルに設定して、設定をオーバーライドすることもできますが、これを行うこともできます。)

次に、メッセージを通常どおりにログに記録すると、出力ウィンドウに表示されます。

Logger.Information("Did stuff!");

これはそれほど大したことのようには思えないので、いくつかの追加の利点を説明しましょう。私にとって最大のものは、出力ウィンドウとコンソールの両方に同時にログを記録できることでした。

Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Trace()
    .WriteTo.Console(standardErrorFromLevel: LogEventLevel.Error)
    .CreateLogger();

これにより、とのすべての呼び出しを複製する必要がなく、出力をどのように消費するかという点で大きな柔軟性が得られConsole.WriteましたDebug.Write。コードを作成するとき、終了時に出力が失われることを恐れずに、Visual Studioでコマンドラインツールを実行できました。私がそれをデプロイして何かをデバッグする必要があったとき(そしてVisual Studioが利用できなかったとき)、コンソール出力はすぐに利用できました。スケジュールされたタスクとして実行されている場合、同じメッセージをファイル(またはその他の種類のシンク)に記録することもできます。

つまり、Serilogを使用してこれを行うと、メッセージを多数の宛先にダンプするのが非常に簡単になり、実行方法に関係なく常に出力に簡単にアクセスできるようになります。

また、最小限の設定とコードが必要です。


1
Serilogもgithub.com/serilog/serilog-sinks-debugに「デバッグ」シンクを備えています。これは同様に機能しますが、フォーマットが少し優れています:-) HTH!
Nicholas Blumhardt 2017年

.netパブリック(静的の場合もある)メソッドを作成し、Console.WriteやDebug.Writeなどの必要なものをすべて配置して、どこでも使用しないのはなぜですか。
Saulius

@Saulius "スケジュールされたタスクとして実行されている場合、同じメッセージをファイル(または他の種類のシンク)に記録することもできます。最終的には、Serilogを使用してこれを行うと、メッセージを多数の出力先。実行方法に関係なく、いつでも簡単に出力にアクセスできます。」
jpmc26

1

これは元の質問に対する回答ではありません。しかし、インタラクティブにオブジェクトデータをダンプする方法を検索しているときにこの質問を見つけたので、この非常に便利な代替手段について言及することで他の人にもメリットがあると考えました。

Debug.Print以下に示すように、最終的にコマンドウィンドウを使用してコマンドを入力しました。これは、テキストとしてコピーできる形式でメモリオブジェクトを印刷しました。

> Debug.Print <item>

  id: 1
  idt: null
  igad: 99
  igbd: 99
  gl_desc: "New #20"
  te_num: "1-001-001-020"


0

以下はVisual Studio 2015で私のために働きました:

OutputDebugStringW(L"Write this to Output window in VS14.");

こちらの OutputDebugStringWのドキュメントをお読みください

ここに画像の説明を入力してください このメソッドは、コードをデバッグしている場合にのみ機能することに注意してください(debug mode


11
それはC ++ですか?質問のタグはc#です。
jpmc26 2017年

0

デバッグの目的で、System.Diagnostics.Debug.Writeline()デバッグリスナーがない限り、コマンドはリリースバージョンのコードにコンパイルされません。デバッグモードで実行しているときに、VS出力ウィンドウを含むすべてのトレースリスナーに書き込みます。

コンソールアプリケーションの場合。Console.Writeline()動作しますが、出力はバイナリのリリースバージョンで生成されます。

テストのデバッグ時には、デバッグ出力も通常の出力ウィンドウに表示されます。一方、console.writelineの出力にはありません(ただし、テスト出力ウィンドウにあります)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.