モジュールおよび関数所有者の指定
! analyze 拡張機能と!owner 拡張機能では、 Triage.ini という名前のファイルを使用して、デバッガーが検出したシンボルの所有者を特定します。
これらの拡張機能を使用すると、関数またはモジュール所有者の ID が "Followup" という単語の後に表示されます。
このTriage.iniは、デバッグ ツールの \triage サブディレクトリに存在するテキスト ファイルで、Windowsです。 サンプル ファイルTriage.ini、パッケージのデバッグ ツールの一部としてWindowsされています。
警告更新されたバージョンのデバッグ ツール for Windows を現在のバージョンと同じディレクトリにインストールすると、そのディレクトリ内のすべてのファイル (Triage.ini を含む) が上書きされます。 サンプル ファイルを変更または置きTriage.ini、そのコピーを別のディレクトリに保存します。 デバッガーを再インストールした後、保存したファイルを既定Triage.iniにコピーできます。
ファイルのTriage.ini形式
Triage.ini ファイルは、デバッガーに分割された関数の所有者を特定することを目的としますが、このファイル内の "所有者" 文字列はデバッグに役立つ可能性があります。 文字列には、コードを作成または管理するユーザーの名前を指定できます。 または、モジュールまたは関数でエラーが発生した場合に実行できる操作に関する短い手順を文字列にすることもできます。
このファイルの各行には、次の構文があります。
Module[!Function]=Owner
アスタリスク (*) は、モジュール名または関数名の末尾にのみ追加できます。 他の場所に表示される場合は、リテラル文字として解釈されます。
所有者文字列にスペースを追加することはできません。 所有者文字列にスペースが存在する場合、それらは無視されます。
構文オプションの詳細については、「 Special Triage.ini Syntax」を参照してください。
次の例は、ファイルのサンプル Triage.ini示しています。
module1=Person1
module2!functionA=Person2
module2!functionB=Person3
module2!funct*=Person4
module2!*=Person5
module3!singleFunction=Person6
mod*!functionC=Person7
Triage.iniと !owner
! owner 拡張機能にモジュールまたは関数名を渡す場合、デバッガーには "Followup" という単語の後にモジュールまたは関数の所有者の名前が表示されます。
次の例では、前のサンプル ファイルをTriage.iniしています。
0:000> !owner module2!functionB
Followup: Person3
ファイルによると、"Person3" は module2!functionB を所有し、"Person4" は module2!funct\ を所有します。 これらの文字列はどちらも! owner に渡される引数と一致します。したがって、より完全な一致が使用されます。
Triage.iniと !analyze
!analyze 拡張機能を使用すると、デバッガーはスタック内の上位の障害のあるフレームを確認し、このフレーム内のモジュールと関数の所有者の特定を試みます。 デバッガーが所有者を特定できる場合は、所有者情報が表示されます。
デバッガーが所有者を特定できない場合、デバッガーは次のスタック フレームに渡され、デバッガーによって所有者が決定されるまで、またはスタックが完全に検査されるまで渡されます。
デバッガーが所有者を特定できる場合、所有者名は "Followup" という単語の後に表示されます。 デバッガーが情報を見つけずにスタック全体を検索すると、名前は表示されません。
次の例では、このトピックTriage.iniしたサンプル ファイルを使用します。
スタック上の最初のフレームが MyModule!someFunction だとします。 デバッガーは、このファイル内で MyModule Triage.iniできません。 次に、スタック上の 2 番目のフレームに進む。
2 番目のフレームが module3!anotherFunction だとします。 デバッガーには module3 のエントリが表示されますが、このモジュールでは anotherFunction と一 致しません。 次に、デバッガーは 3 番目のフレームに進みます。
3 番目のフレームが module2!functionC だとします。 デバッガーは最初に完全一致を確認しますが、そのような一致は存在しません。 その後、デバッガーは関数名をトリミングし、関数の module2!funct\* Triage.ini。 この一致は、デバッガーによって所有者が "Person4" と判断されたため、検索が終了します。
デバッガーは、次の例のような出力を表示します。
0:000> !analyze
*******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************
Use !analyze -v to get detailed debugging information.
Probably caused by : module2 ( module2!functionC+15a )
Followup: Person4
---------
より完全な一致は、より短い一致よりも優先されます。 ただし、モジュール名の一致は、常に関数名の一致より優先されます。 module2!funct\* がこのファイルに含Triage.ini場合、デバッガーは一致として module2!\* を選択します。 また、 module2!funct\* と module2!\* の両方が削除された場合は 、mod*!functionC が選択されています。
特殊Triage.ini構文
感嘆符と関数名を省略するか、モジュール名の 後に !\* を追加すると、そのモジュール内のすべての関数が示されます。 このモジュール内の関数も個別に指定されている場合は、より正確な仕様が優先されます。
モジュール名または関数名として "default" を使用する場合は、ワイルドカード文字と同じです。 たとえば、 nt!\* は nt!default と同じで、 既定値 は *!\* と同じです。
一致したが、無視という単語が等号 (=) の右側に表示される場合、デバッガーはスタック内の次のフレームに進みます。
所有者の名前last_前maybe_追加または追加できます。 このプレフィックスは、!analyze を実行するときに所有者の優先順位を 低くします。 デバッガーは、スタック上の上位の一致よりもmaybe_より低い明確な一致を選択します。 デバッガーは、スタック上maybe_一致する一致よりも低い一致するlast_を選択します。
サンプル Triage.ini
テンプレートのTriage.iniは、デバッグ ツール for Windowsに含まれています。 このファイルに必要なモジュールと関数の所有者を追加できます。 グローバルな既定値を設定したくない場合は、このファイルの先頭 にある default=MachineOwner 行を削除します。