Angeben von Modul- und Funktionsbesitzern

Die Erweiterungen !analyze und !owner verwenden eine Datei mit dem Namen triage.ini, um den Besitzer der Symbole zu bestimmen, auf die der Debugger trifft.

Wenn Sie diese Erweiterungen verwenden, werden die Identitäten des Funktions- oder Modulbesitzers nach dem Wort "Followup" angezeigt.

Die triage.ini-Datei ist eine Textdatei, die sich im Unterverzeichnis \triage der Installation der Debugtools für Windows befindet. Ein Beispiel triage.ini Datei ist als Teil des Pakets Debugtools für Windows enthalten.

Warnung Wenn Sie eine aktualisierte Version der Debugtools für Windows im selben Verzeichnis wie die aktuelle Version installieren, werden alle Dateien in diesem Verzeichnis überschrieben, einschließlich triage.ini. Nachdem Sie die Beispieldatei triage.ini geändert oder ersetzt haben, speichern Sie eine Kopie davon in einem anderen Verzeichnis. Nachdem Sie die Debugger neu installiert haben, können Sie die gespeicherten triage.ini über die Standardversion kopieren.

Format der triage.ini-Datei

Obwohl die triage.ini-Datei ihnen helfen soll, den Besitzer einer Funktion zu bestimmen, die in den Debugger unterteilt ist, können die "Besitzer"-Zeichenfolgen in dieser Datei alles sein, was Ihnen beim Debuggen helfen kann. Die Zeichenfolgen können Namen von Personen sein, die den Code geschrieben oder verwaltet haben. Oder die Zeichenfolgen können kurze Anweisungen darüber sein, was Sie tun können, wenn ein Fehler in einem Modul oder einer Funktion auftritt.

Jede Zeile in dieser Datei weist die folgende Syntax auf.

Module[!Function]=Owner 

Sie können ein Sternchen (*) nur am Ende eines Modul- oder Funktionsnamens hinzufügen. Wenn es an anderer Stelle angezeigt wird, wird es als Literalzeichen interpretiert.

In der Besitzerzeichenfolge können keine Leerzeichen hinzugefügt werden. Wenn Leerzeichen in der Besitzerzeichenfolge vorhanden sind, werden sie ignoriert.

Weitere Informationen zu Syntaxoptionen finden Sie unter Spezielle triage.ini Syntax.

Die folgenden Beispiele zeigen ein Beispiel triage.ini Datei.

module1=Person1
module2!functionA=Person2
module2!functionB=Person3
module2!funct*=Person4
module2!*=Person5
module3!singleFunction=Person6
mod*!functionC=Person7

Triage.ini und !Besitzer

Wenn Sie einen Modul- oder Funktionsnamen an die Erweiterung !owner übergeben, zeigt der Debugger das Wort "Followup" gefolgt vom Namen des Modul- oder Funktionsbesitzers an.

Im folgenden Beispiel wird das vorherige Beispiel triage.ini Datei verwendet.

0:000> !owner module2!functionB
Followup:  Person3

Gemäß der Datei besitzt "Person3" module2!functionB und "Person4" module2!funct\. Beide Zeichenfolgen stimmen mit dem Argument überein, das an !owner übergeben wird, sodass die vollständigere Übereinstimmung verwendet wird.

Triage.ini und !analyze

Wenn Sie die Erweiterung !analyze verwenden, überprüft der Debugger den oberen fehlerbehafteten Frame im Stapel und versucht, den Besitzer des Moduls und der Funktion in diesem Frame zu ermitteln. Wenn der Debugger den Besitzer ermitteln kann, werden die Besitzerinformationen angezeigt.

Wenn der Debugger den Besitzer nicht ermitteln kann, übergibt der Debugger den nächsten Stapelrahmen usw., bis der Debugger den Besitzer bestimmt oder der Stapel vollständig untersucht wird.

Wenn der Debugger den Besitzer ermitteln kann, wird der Besitzername nach dem Wort "Followup" angezeigt. Wenn der Debugger den gesamten Stapel durchsucht, ohne Informationen zu finden, wird kein Name angezeigt.

Im folgenden Beispiel wird das Beispiel triage.ini-Datei verwendet, die weiter oben in diesem Thema angegeben ist.

Angenommen, der erste Frame im Stapel ist MyModule!someFunction. Der Debugger findet MyModule in der triage.ini-Datei nicht. Als Nächstes wird mit dem zweiten Frame auf dem Stapel fortgesetzt.

Angenommen, der zweite Frame ist module3!anotherFunction. Der Debugger sieht zwar einen Eintrag für module3, aber es gibt keine Übereinstimmung mit einer anderenFunktion in diesem Modul. Als Nächstes fährt der Debugger mit dem dritten Frame fort.

Angenommen, der dritte Frame ist module2!functionC. Der Debugger sucht zuerst nach einer genauen Übereinstimmung, aber eine solche Übereinstimmung ist nicht vorhanden. Der Debugger schneidet dann den Funktionsnamen ab und ermittelt module2!funct\* in triage.ini. Durch diese Übereinstimmung wird die Suche beendet, da der Debugger ermittelt, dass der Besitzer "Person4" ist.

Der Debugger zeigt dann eine Ausgabe an, die dem folgenden Beispiel ähnelt.

0:000> !analyze
*******************************************************************************
*                                                                             *
*                        Exception Analysis                                   *
*                                                                             *
*******************************************************************************

Use !analyze -v to get detailed debugging information.

Probably caused by : module2 ( module2!functionC+15a )

Followup: Person4
---------

Eine vollständigere Übereinstimmung hat Vorrang vor einer kürzeren Übereinstimmung. Eine Übereinstimmung mit dem Modulnamen wird jedoch immer einer Funktionsnamen-Übereinstimmung vorgezogen. Wenn module2!funct\* nicht in dieser triage.ini-Datei enthalten gewesen wäre, hätte der Debugger module2!\* als Übereinstimmung ausgewählt. Und wenn sowohl module2!funct\* als auch module2!\* entfernt worden wären, wäre mod*!functionC ausgewählt worden.

Spezielle triage.ini Syntax

Wenn Sie das Ausrufezeichen und den Funktionsnamen weglassen oder !\* nach einem Modulnamen hinzufügen, werden alle Funktionen in diesem Modul angegeben. Wenn eine Funktion innerhalb dieses Moduls ebenfalls separat angegeben wird, hat die genauere Spezifikation Vorrang.

Wenn Sie "default" als Modul- oder Funktionsnamen verwenden, entspricht dies einem Wildcardzeichen. Nt !\* ist z. B. identisch mit nt!default, und der Standardwert ist identisch mit *!\*.

Wenn eine Übereinstimmung hergestellt wird, aber das Wort ignorieren rechts neben dem Gleichheitszeichen (=) angezeigt wird, fährt der Debugger mit dem nächsten Frame im Stapel fort.

Sie können last_ oder maybe_ vor dem Namen eines Besitzers hinzufügen. Dieses Präfix gibt dem Besitzer weniger Priorität, wenn Sie !analyze ausführen. Der Debugger wählt eine eindeutige Übereinstimmung aus, die niedriger auf dem Stapel ist, als eine maybe_ Übereinstimmung, die höher auf dem Stapel ist. Der Debugger wählt auch eine maybe_ Übereinstimmung aus, die niedriger im Stapel ist, als eine last_ Übereinstimmung, die höher im Stapel ist.

Beispiel für triage.ini

Ein Beispiel triage.ini Vorlage ist im Paket Debugtools für Windows enthalten. Sie können dieser Datei die Besitzer beliebiger Module und Funktionen hinzufügen. Wenn Sie keine globale Standardeinstellung verwenden möchten, löschen Sie die Zeile default=MachineOwner am Anfang dieser Datei.