デバッグ出力関数

Microsoft® DirectShow® 基底クラスはデバッグ情報表示用のいくつかのマクロを提供する。

要件

ヘッダー : Wxdebug.h 内で宣言し、Streams.h をインクルードする。

ライブラリ : Strmbase.lib (リテール ビルド) または Strmbasd.lib (デバッグ ビルド) を使う。

関数 説明
DbgCheckModuleLevel 与えられたメッセージ タイプとレベルでロギングが可能かどうかをチェックする。
DbgDumpObjectRegister アクティブなオブジェクトについての情報を表示する。
DbgInitialise デバッグ ライブラリを初期化する。
DbgLog 指定したタイプとレベルでロギング可能な場合は、デバッグ出力位置に文字列を送る。
DbgOutString デバッグ出力位置に文字列を送る。
DbgSetModuleLevel 1 つまたは複数のメッセージ タイプのロギング レベルを設定する。
DbgTerminate デバッグ ライブラリをクリーン アップする。
DisplayType メディア タイプについての情報をデバッグ出力位置に送る。
DumpGraph フィルタ グラフについての情報をデバッグ出力位置に送る。
GuidNames Uuids.h で定義されている GUID を表す文字列を含むグローバル配列。
NAME デバッグ専用文字列を生成する。
NOTE デバッグ出力位置に文字列を送る。
REMIND コンパイル時に注意を生成する。

注意

DirectShow のデバッグ環境は、特定の種類のデバッグ情報だけを表示するよう設定できる。この機能で、問題をコード内の特定の範囲に絞ることができる。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")));

すべてのモジュールは各メッセージ タイプに対して自身のデバッグ レベルを設定できる。(モジュールは DLL または実行モジュールであり、Microsoft® Win32® LoadLibrary 関数を使って読み込まれる。) モジュールのデバッグ レベルは、レジストリの次のキーの下に表示される。

\HKEY_LOCAL_MACHINE\SOFTWARE\Debug\<Module Name>\<Message Type>

<Message Type> はメッセージ タイプから先頭の "LOG_" を取ったものである。たとえば、LOCKING は LOG_LOCKING メッセージとなる。モジュールが読み込まれると、デバッグ ライブラリはモジュールのロギング レベルをレジストリから検索する。レジストリ キーがないと、デバッグ ライブラリはそれを作成する。

モジュールは DbgSetModuleLevel 関数を使って、自身のレベルを実行時に設定することもできる。デバッグ出力にメッセージを送るには、DbgLog マクロを呼び出すこと。次の例はタイプ LOG_TRACE のレベル 3 メッセージを作成している :

また、以下のレジストリ キーを使って、グローバル ロギング レベルを指定できる。

\HKEY_LOCAL_MACHINE\SOFTWARE\Debug\GLOBAL\<Message Type>

デバッグ ライブラリは、グローバル レベルとモジュール レベルのどちらか高い方を使う。

デバッグ出力位置

デバッグ出力位置は別のレジストリ キーによって定義されている :

\HKEY_LOCAL_MACHINE\SOFTWARE\Debug\<Module Name>\LogToFile

このキーの値が Console の場合は、コンソール ウィンドウに出力される。この値が Deb、Deb、Debug、Debugger または空白文字列の場合は、デバッガ ウィンドウに出力される。それ以外の場合、出力はレジストリ キーで指定されたファイルに書き込まれる。

実行モジュールが DirectShow デバッグ ライブラリを使う前に、DbgInitialise 関数を呼び出さなければならない。最後に、DbgTerminate 関数を呼び出さなければならない。DLL エントリ ポイント (基底クラス ライブラリ内で定義) が自動的にこれらの関数を呼び出すため、DLL がこれらを呼び出す必要はない。