Ereignisfilter
Ereignisfilter bieten eine einfache Ereignisfilterung. sie beeinflussen, wie die Debugger-Engine nach einem Ereignis in einem Ziel vorgeht. Wenn ein Ereignis auftritt, bestimmt das Modul, ob dieses Ereignis einem Ereignisfilter entspricht. Wenn dies der Fall ist, beeinflusst der Break status für den Ereignisfilter, ob der Debugger in das Ziel einbricht. Wenn es sich bei dem Ereignis um ein Ausnahmeereignis handelt, bestimmt die Behandlung status, ob die Ausnahme im Ziel als behandelt oder nicht behandelt werden soll.
Hinweis Wenn eine komplexere Ereignisfilterung erforderlich ist, können Ereignisrückrufe verwendet werden.
Ereignisfilter sind in drei Kategorien unterteilt.
Spezifische Ereignisfilter. Dies sind die Filter für alle Nicht-Ausnahmeereignisse. Eine Liste dieser Ereignisse finden Sie unter DEBUG_FILTER_XXX .
Spezifische Ausnahmefilter. Der erste spezifische Ausnahmefilter ist der Standard-Ausnahmefilter. Der Rest sind Filter für die Ausnahmen, für die das Modul integrierte Filter enthält. Eine Liste der spezifischen Ausnahmefilter finden Sie unter Spezifische Ausnahmen .
Beliebige Ausnahmefilter. Dies sind Filter für Ausnahmeereignisse, die manuell hinzugefügt wurden.
Die Filter in den Kategorien 1 und 2 werden zusammen als spezifische Filter bezeichnet, und die Filter in den Kategorien 2 und 3 werden zusammen als Ausnahmefilter bezeichnet. Die Anzahl der Filter in jeder Kategorie wird von GetNumberEventFilters zurückgegeben.
Ein Ereignis stimmt mit einem bestimmten Ereignisfilter überein, wenn der Typ des Ereignisses mit dem Typ des Filters identisch ist. Einige Ereignisfilter verfügen über einen zusätzlichen Parameter, der die übereinstimmenden Ereignisse weiter einschränkt.
Ein Ausnahmeereignis stimmt mit einem Ausnahmefilter überein, wenn der Ausnahmecode für das Ausnahmeereignis mit dem Ausnahmecode für den Ausnahmefilter identisch ist. Wenn kein Ausnahmefilter mit demselben Ausnahmecode wie das Ausnahmeereignis vorhanden ist, wird das Ausnahmeereignis vom Standard-Ausnahmefilter behandelt.
Befehle und Parameter
Ereignisfilter können über einen Debuggerbefehl verfügen. Dieser Befehl wird von der Engine ausgeführt, wenn ein mit dem Filter übereinstimmende Ereignis auftritt. GetEventFilterCommand und SetEventFilterCommand können verwendet werden, um diesen Befehl abzurufen und festzulegen. Bei Ausnahmefiltern wird dieser Befehl bei der ersten Chance der Ausnahme ausgeführt. Ein separater Befehl mit zweiter Chance kann beim Ausnahmeereignis mit zweiter Chance ausgeführt werden. Verwenden Sie GetExceptionFilterSecondCommand und SetExceptionSecondCommand, um den Befehl für die zweite Chance abzurufen und festzulegen.
Die Parameter für bestimmte Ereignisfilter und Ausnahmefilter werden von GetSpecificFilterParameters und GetExceptionFilterParameters zurückgegeben. Der Umbruch status und behandeln status für Ereignisfilter kann mithilfe von SetSpecificFilterParameters und SetExceptionFilterParameters festgelegt werden.
SetExceptionFilterParameters kann auch verwendet werden, um beliebige Ausnahmefilter hinzuzufügen und zu entfernen.
Eine kurze Beschreibung bestimmter Filter wird von GetEventFilterText zurückgegeben.
Einige spezifische Filter verwenden Argumente, die einschränken, welche Ereignisse der Filter entspricht. GetSpecificFilterArgument und SetSpecificFilterArgument rufen Argumente für die spezifischen Filter ab, die Argumente unterstützen, und legen sie fest. Wenn ein bestimmter Filter kein Argument hat, gibt es keine Einschränkung für die Ereignisse, mit denen er übereinstimmt. In der folgenden Tabelle sind die Ereignisfilter aufgeführt, die Argumente annehmen, und wie sie die ihnen zugeordneten Ereignisse einschränken:
Ereignis | Kriterien übereinstimmen |
---|---|
Prozess erstellen |
Der Name des erstellten Prozesses muss mit dem Argument übereinstimmen.1 |
Exit-Prozess |
Der Name des beendeten Prozesses muss mit dem Argument übereinstimmen.1 |
Modul laden |
Der Name des geladenen Moduls muss mit dem Argument übereinstimmen.1 |
Modul entladen |
Die Basisadresse des entladenen Moduls muss mit dem Argument identisch sein.2 |
Zielausgabe |
Die Debugausgabe des Ziels muss mit dem Argument übereinstimmen.3 |
Hinweis
Das Argument verwendet die Zeichenfolgenplatzhaltersyntax und wird beim Eintreten des Ereignisses mit dem Imagenamen (Pfad ignoriert) verglichen. Wenn der Name des Moduls oder Prozesses nicht verfügbar ist, wird er als Übereinstimmung betrachtet.
Das Argument ist ein Ausdruck, der von der Engine ausgewertet wird, wenn das Argument festgelegt wird.
Das Argument verwendet die Zeichenfolgenplatzhaltersyntax und wird mit der Debugausgabe des Ziels verglichen. Wenn die Ausgabe nicht bekannt ist, wird sie als Übereinstimmung betrachtet.
Index- und Ausnahmecode
Jeder Ereignisfilter verfügt über einen Index. Der Index ist eine Zahl zwischen null und eins kleiner als die Gesamtanzahl der Filter (einschließlich). Den Indexbereich für jede Filterkategorie finden Sie in den Von GetNumberEventFilters zurückgegebenen Werten SpecificEvents, SpecificExceptions und ArbitraryExceptions, wie in der folgenden Tabelle beschrieben:
Ereignisfilter | Index des ersten Filters | Anzahl der Filter |
---|---|---|
Spezifische Ereignisfilter |
0 |
SpecificEvents |
spezifische Ausnahmefilter |
SpecificEvents |
SpecificExceptions |
Beliebige Ausnahmefilter |
SpecificEvents + SpecificExceptions |
ArbitraryExceptions |
Die Indizes für die spezifischen Ereignisfilter befinden sich in der ersten Tabelle im Thema DEBUG_FILTER_XXX. Der Index des Standard-Ausnahmefilters (der erste spezifische Ausnahmefilter) ist SpecificEvents. Wenn ein beliebiger Ausnahmefilter entfernt wird, können sich die Indizes der anderen beliebigen Ausnahmefilter ändern.
Die Ausnahmefilter werden normalerweise durch Ausnahmecode angegeben. Einige Methoden erfordern jedoch den Index der Ausnahme. Um den Index eines Ausnahmefilters für eine bestimmte Ausnahme zu finden, verwenden Sie GetExceptionFilterParameters , um alle Ausnahmefilter zu durchlaufen, bis Sie den Ausnahmefilter mit demselben Ausnahmecode wie die Ausnahme finden. Die Ausnahmecodes für die spezifischen Ausnahmefilter finden Sie im Thema Spezifische Ausnahmen.
Systemfehler
Wenn ein Systemfehler auftritt, wird das Modul in den Debugger eingebrochen oder den Fehler in den Ausgabedatenstrom ausgegeben, wenn der Fehler auf oder unterhalb der angegebenen Ebenen auftritt. Diese Ebenen werden von GetSystemErrorControl zurückgegeben und können mit SetSystemErrorControl geändert werden.