Microsoft DirectX 8.0 |
Microsoft® DirectShow® 基底クラスはデバッグ情報表示用のいくつかのマクロを提供する。
宣言 : Wxdebug.h
DirectShow のデバッグ環境は特定のタイプのデバッグ情報を、他の者を無視して、ファインチューンすることができる。この機能で、コード内の特定の範囲に問題をピンポイントさせることができる。DirectShow は以下の表に示されるいくつかのメッセージタイプを定義する。
LOG_ERROR | エラー通知。 |
LOG_LOCKING | クリティカル セクションのロックとアンロック。 |
LOG_MEMORY | メモリ割り当てと、オブジェクトの作成および破棄。 |
LOG_TIMING | タイミングとパフォーマンスの測定。 |
LOG_TRACE | 一般的な呼び出しトレース。 |
すべてのモジュールは各メッセージタイプに対し自身のデバッグレベルを設定することができる。(モジュール は DLL もしくは実行モジュールであり、Microsoft® Win32® LoadLibrary 関数を使ってロードされる。) モジュールの与えられたメッセージタイプに対するロギング レベルはレジストリ内の次のキーで見ることができる :
\HKEY_LOCAL_MACHINE\SOFTWARE\Debug\<Module Name>\<Message Type>
<Message Type> はメッセージ タイプ から頭の "LOG_" を取ったものである。たとえば、LOCKING は LOG_LOCKING メッセージ。
モジュールがロードされると、デバッグ ライブラリはモジュールのロギング レベルをレジストリから読み込む。レジストリ キーがないと、デバッグ ライブラリはそれを作成する。メッセージタイプのグローバル ロギング レベルは次のキーで指定される :
\HKEY_LOCAL_MACHINE\SOFTWARE\Debug\GLOBAL\<Message Type>
デバッグ ライブラリは大きい方のレベルを使用する。モジュールは DbgSetModuleLevel 関数を使って、自身のレベルをランタイム時に設定することもできる。デバッグ出力にメッセージを送るには、DbgLog マクロを呼び出すこと。次の例はタイプ LOG_TRACE のレベル 3 メッセージを作成している :
DbgLog((LOG_TRACE, 3, "This is a debug message."));
デバッグ ビルドでは、現在のLOG_TRACE メッセージのロギング レベルが 3 あるいはそれ以上なら、メッセージはデバッグ出力を送る。それ以外なら無視される。デバッグ ビルドはストリームクラス ヘッダー ファイル Streams.h に含まれているプリプロセッサ シンボル DEBUG を定義しなければならない。
デバッグ出力位置は別のレジストリキーによって定義されている :
\HKEY_LOCAL_MACHINE\SOFTWARE\Debug\<Module Name>\LogToFile
この値が Console なら、出力はコンソール ウィンドウになる。この値が Deb、Debug、Debugger あるいは空白文字列なら、出力はデバッガ ウィンドウになる。それ以外なら、出力はレジストリ キーで指定されたファイルに書き込まれる。
実行モジュールが DirectShow デバッグ ライブラリを使う前に、DbgInitialise 関数を呼び出さなければならない。最後に、DbgTerminate 関数呼び出さなければならない。これらの関数を呼び出すのに DLL は必要ない。
関数 | 説明 |
---|---|
DbgCheckModuleLevel | 与えられたメッセージ タイプとレベルでロギングが可能かどうかをチェックする。 |
DbgDumpObjectRegister | アクティブなオブジェクトについての情報を表示する。 |
DbgInitialise | デバッグ ライブラリを初期化する。 |
DbgLog | 指定したタイプとレベルでロギング可能なら、デバッグ出力位置に文字列を送る。 |
DbgOutString | デバッグ出力位置に文字列を送る。 |
DbgSetModuleLevel | 1 つ以上のメッセージ タイプのロギング レベルを設定する。 |
DbgTerminate | デバッグ ライブラリをクリーン アップする。 |
DisplayType | メディア タイプについての情報をデバッグ出力位置に送る。 |
DumpGraph | フィルタ グラフについての情報をデバッグ出力位置に送る。 |
NAME | デバッグ専用文字列を生成する。 |
NOTE | デバッグ出力位置に文字列を送る。 |
REMIND | コンパイル時に注意を生成する。 |
与えられたメッセージ タイプとレベルでロギングが可能かどうかをチェックする。リテール ビルドでは無視される。
構文
BOOL DbgCheckModuleLevel( DWORD Types, DWORD Level );
パラメータ
- Types
- 1 つ以上のメッセージ タイプのビットの組み合わせ。
- Level
- ロギング レベル
戻り値
もし指定したメッセージタイプに対するロギングが指定したレベルあるいはそれ以上にセットされていると、TRUE を返す。それ以外なら、FALSE を返す。
アクティブなオブジェクトについての情報を表示する。リテール ビルドでは無視される。
構文
void DbgDumpObjectRegister(void);
注意
デバッグ ビルドでは、デバッグ ライブラリはアクティブなオブジェクトのリストを保持する。CBaseObjectから派生したすべてのオブジェクトを含むリストは、現在のモジュールによって作成され、削除されない。CBaseObject コンストラクタとデストラクタ メソッドがこのリストをアップデートする。
この関数はいくつかの LOG_MEMORY メッセージを生成する。ロギング レベル 1 では、この関数はオブジェクトの全数だけを表示する。ロギング レベル 2 以上では、オブジェクトのリストを表示する。
デバッグ ライブラリを初期化する。リテール ビルドでは無視される。
構文
void DbgInitialise( HINSTANCE hInst );
パラメータ
- hInst
- モジュール インスタンスへのハンドル。
注意
実行モジュールでは、DirectShow デバッグ環境を使う前にこのメソッドを呼び出すこと。実行モジュールが終了する前に、DbgTerminate 関数を呼び出し、デバッグ ライブラリをクリーン アップすること。
基底クラス ライブラリ (Strmbase.lib) にリンクしている DLL では、この関数を呼び出す必要はない。この関数は DLL がロードされるとき、自動的に呼び出される。
指定したタイプとレベルでロギング可能なら、デバッグ出力位置に文字列を送る。リテール ビルドでは無視される。
構文
void DbgLog(( DWORD Types, DWORD Level, const TCHAR *pFormat, ... ));
パラメータ
- Types
- 1 つ以上のメッセージ タイプのビットの組み合わせ。
- Level
- このメッセージのロギング レベル
- pFormat
- printfスタイルのフォーマット文字列。
- ...
- フォーマット文字列の追加引数。
注意
任意のメッセージタイプのデバッグ ロギングが指定したレベル以上に設定されていれば、デバッグ出力位置に文字列を送る
例
DbgLog((LOG_TRACE, 3, TEXT("Connected input pin %d"), nPinNumber));カッコを追加するときはマクロ パラメータで包まなければならないことに注意。
デバッグ出力位置に文字列を送る。リテール ビルドでは無視される。
構文
void DbgOutString( LPCTSTR psz );
パラメータ
- psz
- 出力する文字列。
注意
デバッグ ビルドでは、現在のデバッグ出力レベルと関係なく、この関数は必ず文字列を出力する。出力に関してより細かなコントロールをするには、DbgLog マクロを使うこと。
例
DbgOutString("Creating the filter graph...\n");
1 つ以上のメッセージ タイプのロギング レベルを設定する。リテール ビルドでは無視される。
構文
void DbgSetModuleLevel( DWORD Types, DWORD Level );
パラメータ
- Types
- 1 つ以上のメッセージ タイプのビットの組み合わせ。
- Level
- 指定したメッセージタイプのロギング レベル
デバッグ ライブラリをクリーン アップする。リテール ビルドでは無視される。
構文
void DbgTerminate(void);
注意
DbgInitialise 関数を呼び出したなら、この関数を呼び出すこと。
メディア タイプについての情報をデバッグ出力位置に送る。リテール ビルドでは無視される。
構文
void DisplayType( LPSTR label, const AM_MEDIA_TYPE *pmtIn );
パラメータ
- label
- メディア タイプ情報を表示するメッセージが入る文字列。
- pmtIn
- メディア タイプが入る AM_MEDIA_TYPE 構造体へのポインタ。
注意
この関数はいくつかの LOG_TRACE メッセージを生成する。ロギング レベル 2 以上では、この関数はメジャー タイプ、マイナー タイプ、フォーマット タイプ、フォーマット ブロックからのデータを表示する。ロギング レベル 5 以上では、この関数はビデオ タイプの転送元矩形やターゲット矩形のような追加情報を表示する。
フィルタ グラフについての情報をデバッグ出力位置に送る。リテール ビルドでは無視される。
構文
void DumpGraph( IFilterGraph *pGraph, DWORD dwLevel )
パラメータ
- pGraph
- フィルタ グラフ マネージャの IFilterGraph インターフェイスへのポインタ。
- dwLevel
- ロギング レベル。関数は指定したロギング レベルで LOG_TRACE メッセージを生成する。
デバッグ専用文字列を生成する。
構文
NAME( strLiteral );
パラメータ
- strLiteral
- テキスト 文字列。
注意
デバッグ ビルドでは、このマクロは TEXT マクロと同じである。リテール ビルドでは、(TCHAR*) NULL を解決する。このマクロは CBaseObject クラスから派生したオブジェクトの名前を宣言するとき便利である。
例
pObject = new CBaseObject(NAME("My Object"));
デバッグ出力位置に文字列を送る。リテール ビルドでは無視される。
構文
NOTE( pFormat ); NOTEn( pFormat, arg1 ... arg5 );
パラメータ
- pFormat
- printfスタイルのフォーマット文字列。
- arg1 arg5
- フォーマット文字列の追加引数。引数の数はマクロの名前と一致しなければならない。たとえば、NOTE1 は 1 つの引数を持ち、NOTE5 は 5 つの引数を持つ。
注意
これらのマクロは DbgLog マクロの変形である。それらはレベル 5 LOG_TRACE メッセージを生成する。
例
NOTE("Warning, failed to created graph."); NOTE2("Width: %d, Height: %d", width, height);
コンパイル時に注意を生成する。このマクロはパラメータ文字列、ソース ファイル名、ライン ナンバーを含む文字列を生成する。
構文
REMIND( strLiteral );
パラメータ
- strLiteral
- テキスト文字列。
例
このマクロはコンパイル時のワーニングを生成する際に便利である :
#pragma message (REMIND("TO DO: Add support for IDispatch."))