System.Diagnostics.Debug.Write出力はどこに表示されますか?


146

次のC#プログラム(で作成csc hello.csHello via Console!は、コンソールとHello via OutputDebugStringDebugViewウィンドウにのみ印刷されます。ただし、どちらのSystem.Diagnostics.*呼び出しも表示されません。何故ですか?

using System;
using System.Runtime.InteropServices;
class Hello {
    [DllImport("kernel32.dll", CharSet=CharSet.Auto)]
    public static extern void OutputDebugString(string message);

    static void Main() {
        Console.Write( "Hello via Console!" );
        System.Diagnostics.Debug.Write( "Hello via Debug!" );
        System.Diagnostics.Trace.Write( "Hello via Trace!" );
        OutputDebugString( "Hello via OutputDebugString" );
    }
}

おそらくいくつかの特別なコマンドラインスイッチが必要ですcscか?

私は開発にVisual Studioを使用していません。これは純粋なコマンドラインのものです。


別の返信のコメントで述べたように、Microsoft(SysInternals)DebugViewを使用できます:technet.microsoft.com/en-us/sysinternals/bb896647.aspx
George Birbilis

回答:


77

他の人が指摘したように、これらのストリームを読み取るにはリスナーを登録する必要があります。またDebug.Write、はDEBUGビルドフラグが設定されてTrace.Writeいる場合にのみ機能し、TRACEビルドフラグが設定されている場合にのみ機能します。

DEBUGおよび/またはTRACEフラグの設定は、Visual Studioのプロジェクトプロパティで、またはcsc.exeに次の引数を指定することで簡単に実行できます。

/define:DEBUG;TRACE


5
DebugオブジェクトとTraceオブジェクトが同じトレースリスナーを使用しているため、Debug.WriteとTrace.Writeの両方が同じ場所に出力されることを知るのに役立ちました(期待していませんでした)。実行されない可能性がある状況では
hello_earth

1
それらがどのような条件であるかについて詳しく説明してもらえますか?debug.Writeがtrace.writeと同じように機能しないのはどのような状況ですか?
パチェリエ

2
これは私にとっては機能しません、vsプロジェクトのプロパティにデバッグフラグとトレースフラグを設定し、Debug.WriteLineを使用しています。行は実行されますが、出力ウィンドウには何も表示されません。他のアドバイスはありますか
f1wade 2014

114

デバッグSystem.Diagnostics.Debug.WriteLineは出力ウィンドウ(Ctrl+ Alt+ O)に表示されますがTraceListenerDebug.Listenersコレクションにを追加して、Debug.WriteLine他の場所に出力する呼び出しを指定することもできます。

注:Debug.WriteLineVisual Studioオプションの[ ツール ] →[ オプション ] →[ デバッグ] →[ 全般 ]で[すべての出力ウィンドウのテキストをイミディエイトウィンドウにリダイレクトする]をオンにしていると、呼び出しが出力ウィンドウに表示されない場合があります。「ツールオプションデバッグ」を表示するには、「ツールオプションすべての設定を表示」の横にあるチェックボックスをオンにします


4
Visual Studio 2012でデバッグ中に(Ctrl + Alt + O)が出力ウィンドウを表示することを確認したい
石川

45

TraceListenerそれらをコンソールに表示するには、を追加する必要があります。

TextWriterTraceListener writer = new TextWriterTraceListener(System.Console.Out);
Debug.Listeners.Add(writer);

デバッグモードの場合は、Visual Studioの出力ウィンドウにも表示されます。


2
どうやらDebugViewは.NET Debug.Write()とWin32 OutputDebugString()の両方をキャプチャします:technet.microsoft.com/en-us/sysinternals/bb896647
dlchambers

@dlchambers:私はそれが正しいとは思いません。そのページはOutputDebugString()and(kernel)の表示を主張していますDbgPrint().
Mike C

1
@dlchambers:コメントを取り消します。キャプチャ設定に「グローバルWin32」が含まれているDebug.Write() 場合、DebugViewがキャプチャできることを発見しました。これには、管理モードで実行する必要があります。
マイクC

10

Visual Studioでデバッグしているときに、[出力]ウィンドウを表示します([表示]-> [出力])。そこに表示されます。



5

コードにdebug.write( "")を書き込むと、「出力ウィンドウ」ではなく「イミディエイトウィンドウ」に出力されます。

あなたはそれを試すことができます。「イミディエイト」ウィンドウを表示するため(デバッグウィンドウイミディエイト)。


2

私の場合の解決策は:

  1. 出力ウィンドウを右クリックします。
  2. 「プログラム出力」を確認してください

0

VB.NETの場合、以下が適用されます。「デバッグ」を選択し、「デバッグの開始」を確認する必要があります。これはを押して到達できますF5

また、Console.WriteLineは、出力ウィンドウで「Release」としてビルドした場合にのみメッセージを表示します。

前述のように、[表示][ 出力][ 出力]ウィンドウを開き、Console.WriteLineメッセージを表示する場合は[ビルド]を、Debug.WriteLineまたはTrace.WriteLineメッセージを表示する場合は[デバッグ]を選択してください。

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