C#とVisual Studio2010を使用しています。
OutputDebugString
を使用してデバッグ情報を書き込む場合、出力ウィンドウに表示する必要がありますか?
DebugView のOutputDebugString
からの出力を確認できますが、VisualStudioの[出力]ウィンドウに表示されると思いました。メニューツールの下を見ましたか? オプション? デバッグ? Generalであり、出力はイミディエイトウィンドウにリダイレクトされていません。メニューのツール*も確認しましたか? オプション? デバッグ? 出力ウィンドウおよびすべての一般出力設定が「オン」に設定されています。最後に、[出力]ウィンドウのドロップダウンリストを使用して、デバッグメッセージを表示するように指定しました。
メニューツール*を変更した場合? オプション? デバッグ? General出力をイミディエイトウィンドウにリダイレクトする場合、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
出力は表示されません。
コンソールウィンドウから実行すると、Debug.WriteLine
とOutputDebugString
の両方がDebugViewに表示されます。
OutputDebugString
出力が出力ウィンドウに表示されないのはなぜですか?
最終的に、私の意図はOutputDebugString
を使用して多くのデバッグ出力を書き込むことではなく、System.DiagnosticsまたはNLogなどを使用します。 OutputDebugString
に書き込むようにロギングプラットフォームを構成した場合、出力がデバッガー内から表示されるかどうかを調べようとしています。
app.config
ファイルを介して構成されたTraceSources
とTraceListeners
を使用する元のプログラム(上記の単純なテストではありません)に戻りました。トレースソースをSystem.Diagnostics.DefaultTraceListener
(OutputDebugString
への書き込みとして文書化されています)に書き込むように構成すると、トレースソースの出力はデバッグウィンドウに移動します。ただし、OutputDebugString
で直接書き込む行(私の簡単な例のように)は、デバッグウィンドウに移動しません。また、TraceListener
に書き込む別のOutputDebugString
を使用した場合(CodeplexのUkadc.Diagnosticsから入手したもの)、その出力はデバッグウィンドウに移動しません。
Ukadc.Diagnosticsトレースリスナーに関する注意事項... Ukadc.Diagnosticsには、出力のカスタムフォーマットを可能にするいくつかのトレースリスナーが含まれています(log4net、NLog、およびLABで使用可能なフォーマットと同様)。したがって、Ukadc.Diagnosticsに「のみ」依存している場合は、「標準」の.NET診断ログを使用できますが、おそらくはるかに大きなプラットフォームに依存することなく、いくつかの高度な機能(出力フォーマットなど)を取得できます。この場合、Ukadc.Diagnostics OutputDebugStringTraceListener
を使用して、ファイルに書き込む場合と同じ形式(必要に応じて、または異なる形式)でログ出力をデバッグウィンドウに書き込むことができます。
私はこれらの質問を見ましたが、それらは実用的な解決策を提供しなかったことに注意してください:
あなたは私にこの質問をしばらく続けさせました。ありえない!仕方。
[プロジェクト]> [プロパティ]> [デバッグ]タブで、[アンマネージコードのデバッグを有効にする]チェックボックスをオンにします。それ以降のVSバージョンでは、「ネイティブコードのデバッグを有効にする」に名前が変更されました。アンマネージコードデバッグエンジンを有効にすると、OutputDebugString()出力が適切にインターセプトされ、[出力]ウィンドウに送信されるようになりました。
デバッグする場合([デバッグ] => [デバッグの開始] F5)、[プロジェクト+プロパティ]の[デバッグ]タブで、[アンマネージコードのデバッグを有効にする]チェックボックスをオンにするとうまく機能します。
デバッグしない場合([デバッグ] => [CTRL + F5をデバッグせずに開始])、SysInternalsライブラリのDebugViewを使用する必要があります。 DebugView for Windows v4.76をダウンロード
次の設定により、代わりに「イミディエイトウィンドウ」に表示される場合があります。
またはそのような何か。