出力関数のデバッグ
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]
DirectShow 基本クラスには、デバッグ情報を表示するためのマクロがいくつか用意されています。
関数 | 説明 |
---|---|
DbgCheckModuleLevel | 特定のメッセージの種類とレベルに対してログ記録が有効になっているかどうかを確認します。 |
DbgDumpObjectRegister | アクティブなオブジェクトに関する情報を表示します。 |
DbgInitialise | デバッグ ライブラリを初期化します。 |
DbgLog | 指定した型とレベルに対してログ記録が有効になっている場合は、デバッグ出力の場所に文字列を送信します。 |
DbgOutString | デバッグ出力の場所に文字列を送信します。 |
DbgSetModuleLevel | 1 つ以上のメッセージの種類のログ レベルを設定します。 |
DbgTerminate | デバッグ ライブラリをクリーンアップします。 |
DisplayType | メディアの種類に関する情報をデバッグ出力の場所に送信します。 |
DumpGraph | フィルター グラフに関する情報をデバッグ出力の場所に送信します。 |
GuidNames | Uuids.h で定義されている GUID を表す文字列を含むグローバル配列。 |
名前 | デバッグ専用の文字列を生成します。 |
メモ | デバッグ出力の場所に文字列を送信します。 |
思い出さ せる | コンパイル時にアラームを生成します。 |
レジストリ キー
DirectShow のデバッグ出力関数では、一連のレジストリ キーが使用されます。 これらのレジストリ キーの場所は、Windows のバージョンによって異なります。
Windows Vista より前のバージョンでは、デバッグ キーは次のパスの下にあります。
Hkey_local_machine\ソフトウェア\デバッグ
Windows Vista 以降では、これらは次のパスの下にあります。
Hkey_local_machine\ソフトウェア\マイクロソフト\Directshow\デバッグ
サード パーティ製フィルターの場合、場所は、フィルターのビルドに使用された DirectShow 基本クラス のバージョンによって異なります。 Windows SDK for Windows Vista に含まれるバージョンでは、新しいパスが使用されます。 以前のバージョンでは、以前のパスが使用されています。
次の解説では、DebugRoot> というラベル<を使用して、これら 2 つのパスを示します。 Windows のバージョンまたは基底クラスのバージョンに応じて、正しいパスを置き換えます。
デバッグ ログ
DirectShow では、次の表に示すように、いくつかのメッセージの種類が定義されています。
値 | 説明 |
---|---|
LOG_ERROR | エラー通知。 |
LOG_LOCKING | 重要なセクションのロックとロック解除。 |
LOG_MEMORY | メモリ割り当て、およびオブジェクトの作成と破棄。 |
LOG_TIMING | タイミングとパフォーマンスの測定。 |
LOG_TRACE | 一般的な呼び出しトレース。 |
CUSTOM1 から CUSTOM5 | カスタム デバッグ メッセージで使用できます |
各 DirectShow デバッグ ログ関数は、メッセージの種類とログ レベルを指定します。 デバッグ メッセージは、そのメッセージの種類の現在のデバッグ レベルがログ関数で指定されたレベル以上の場合にのみ表示されます。 それ以外の場合、メッセージは無視されます。
たとえば、次のコードでは、LOG_TRACE レベルが 3 以上の場合、文字列 "This is a debug message" が出力されます。
DbgLog((LOG_TRACE, 3, TEXT("This is a debug message")));
各モジュールは、メッセージの種類ごとに独自のデバッグ レベルを設定できます。 ( モジュール は、 LoadLibrary 関数を使用して読み込むことができる DLL または実行可能ファイルです)。モジュールのデバッグ レベルは、次のキーの下のレジストリに表示されます。
Hkey_local_machine\<DebugRoot>\<ModuleName>\<MessageType>
ここで <、メッセージの種類> は、メッセージの種類から最初の "LOG_" を引いた値です(たとえば、LOG_LOCKING メッセージの LOCKING )。 モジュールが読み込まれると、デバッグ ライブラリはレジストリ内のモジュールのログ レベルを検索します。 レジストリ キーが存在しない場合は、デバッグ ライブラリによって作成されます。
モジュールは、 DbgSetModuleLevel 関数を使用して、実行時に独自のレベルを設定することもできます。 デバッグ出力にメッセージを送信するには、 DbgLog マクロを呼び出します。 次の例では、LOG_TRACE型のレベル 3 メッセージを作成します。
次のレジストリ キーを使用して、グローバル ログ レベルを指定することもできます。
\HKEY_LOCAL_MACHINE\<DebugRoot>\GLOBAL\<Message Type>
デバッグ ライブラリでは、グローバル レベルまたはモジュール レベルのどちらか大きいレベルが使用されます。
デバッグ出力の場所
デバッグ出力の場所は、別のレジストリ キーによって決まります。
Hkey_local_machine\<DebugRoot>\<Modile Name>\LogToFile
このキーの値が の場合、出力は Console
コンソール ウィンドウに移動します。 値が Deb
、、 Debug
、 Debugger
または空の文字列の場合、出力はデバッガー ウィンドウに移動します。 それ以外の場合、出力はレジストリ キーで指定されたファイルに書き込まれます。
実行可能ファイルで DirectShow デバッグ ライブラリを使用する前に、 DbgInitialise 関数を呼び出す必要があります。 その後、 DbgTerminate 関数を呼び出す必要があります。 DLL は、DLL エントリ ポイント (基本クラス ライブラリで定義) によって自動的に呼び出されるため、これらの関数を呼び出す必要はありません。
関連トピック