次のC#プログラム(csc hello.cs
で構築)は、コンソールにHello via Console!
とDebugViewウィンドウにHello via OutputDebugString
だけを出力します。ただし、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を使用していません。これは純粋なコマンドラインです。
他の人が指摘したように、これらのストリームを読むためにはリスナーを登録する必要があります。また、Debug.Write
はDEBUG
ビルドフラグが設定されている場合にのみ機能し、Trace.Write
はTRACE
ビルドフラグが設定されている場合にのみ機能することに注意してください。
DEBUG
および/またはTRACE
フラグの設定は、Visual Studioのプロジェクトプロパティで、またはcsc.exeに次の引数を指定することで簡単に実行できます。
/define:DEBUG;TRACE
デバッグ中にSystem.Diagnostics.Debug.WriteLine
が出力ウィンドウに表示されます(Ctrl+Alt+O)、TraceListener
をDebug.Listeners
コレクションに追加して、他の場所で出力するDebug.WriteLine
呼び出しを指定することもできます。
注:メニューの下でVisual Studioのオプション[すべての出力ウィンドウテキストをイミディエイトウィンドウにリダイレクトする]がオンになっている場合、Debug.WriteLine
呼び出しが出力ウィンドウに表示されない場合がありますツール→オプション→デバッグ→一般。 「ツール→オプション→デバッグ」と表示するには、「ツール→オプション→すべての設定を表示 "。
コンソールに表示されるようにするには、TraceListener
を追加する必要があります。
TextWriterTraceListener writer = new TextWriterTraceListener(System.Console.Out);
Debug.Listeners.Add(writer);
デバッグモードの場合、Visual Studioの[出力]ウィンドウにも表示されます。
Visual Studioでデバッグしている間に、「出力」ウィンドウを表示します(表示->出力)。そこに表示されます。
コードにdebug.write( "")と記述すると、「出力ウィンドウ」ではなく「即時ウィンドウ」に出力されます。
あなたはそれを試すことができます。 「即時」ウィンドウを表示する場合(デバッグ→ウィンドウ→即時)。
私の場合の解決策は次のとおりです。
VB.NETの場合、以下が適用されます。 「デバッグ」を選択し、「デバッグの開始」を確認する必要があります。これを押すと到達できます F5。
また、Console.WriteLineは、出力ウィンドウで「リリース」としてビルドする場合にのみメッセージを表示します。
前述のように、出力ウィンドウをView→Outputで開き、Console.WriteLineメッセージを表示する場合は「ビルド」を選択し、 Debug.WriteLineまたはTrace.WriteLineメッセージを表示したい。