C#とVisualStudio2010を使用しています。
OutputDebugString
デバッグ情報の書き込みに使用する場合、出力ウィンドウに表示する必要がありますか?
DebugViewからの出力を確認できますがOutputDebugString
、 VisualStudioの[出力]ウィンドウに表示されると思いました。メニューツールの下を見ましたか?オプション?デバッグ?一般、および出力はイミディエイトウィンドウにリダイレクトされていません。メニューツール*もご覧になりましたか?オプション?デバッグ?出力ウィンドウとすべての一般出力設定は「オン」に設定されています。最後に、[出力]ウィンドウのドロップダウンリストを使用して、デバッグメッセージを表示するように指定しました。
メニューツールを変更した場合*?オプション?デバッグ?一般に、出力をイミディエイトウィンドウにリダイレクトする場合、OutputDebugString
メッセージはイミディエイトウィンドウに表示されません。
これが私のテストプログラム全体です。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Diagnostics;
namespace OutputDebugString
{
class Program
{
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern void OutputDebugString(string message);
static void Main(string[] args)
{
Console.WriteLine("Main - Enter - Console.WriteLine");
Debug.WriteLine("Main - Enter - Debug.WriteLine");
OutputDebugString("Main - Enter - OutputDebugString");
OutputDebugString("Main - Exit - OutputDebugString");
Debug.WriteLine("Main - Exit - Debug.WriteLine");
Console.WriteLine("Main - Exit - Console.WriteLine");
}
}
}
デバッガー内で実行すると、Debug.WriteLine
出力は出力ウィンドウに表示されますが、出力は表示されOutputDebugString
ません。
コンソールウィンドウから実行すると、両方がDebugViewDebug.WriteLine
に表示されます。OutputDebugString
OutputDebugString
出力が出力ウィンドウに表示されないのはなぜですか?
最終的に、私の意図は、で多くのデバッグ出力を書き込むことではなく、OutputDebugString
System.DiagnosticsまたはNLogなどを使用します。書き込み用にロギングプラットフォームを構成した場合OutputDebugString
、出力がデバッガー内から表示されるかどうかを調べようとしています。
ファイルを使用TraceSources
してTraceListeners
構成した元のプログラム(上記の単純なテストではありません)に戻りました。app.config
に書き込むようにトレースソースを構成するとSystem.Diagnostics.DefaultTraceListener
(書き込みとして文書化されていますOutputDebugString
)、トレースソースの出力はデバッグウィンドウに移動します。ただし、(私の単純な例のように)直接書き込む行はOutputDebugString
、デバッグウィンドウに移動しません。また、(CodeplexのUkadc.Diagnosticsから取得した)TraceListener
書き込みを行う別のものを使用した場合、その出力はデバッグウィンドウに移動しません。OutputDebugString
Ukadc.Diagnosticsトレースリスナーに関する1つの注意...Ukadc.Diagnosticsには、出力のカスタムフォーマットを可能にするいくつかのトレースリスナーが含まれています(log4net、NLog、およびLABで使用可能なフォーマットと同様)。したがって、Ukadc.Diagnosticsに「のみ」依存する場合、「標準」の.NET診断ログを使用できますが、おそらくはるかに大きなプラットフォームに依存することなく、いくつかの高度な機能(出力フォーマットなど)を取得できます。この場合、Ukadc.DiagnosticsOutputDebugStringTraceListener
を使用して、ファイルに書き込む場合と同じ形式(必要に応じて、または別の形式)でログ出力をデバッグウィンドウに書き込むことができます。
私はこれらの質問を見ましたが、それらは実用的な解決策を提供しなかったことに注意してください: