.step_filter (Schrittfilter festlegen)
Der Befehl .step_filter erstellt eine Liste von Funktionen, die bei der Ablaufverfolgung übersprungen (schrittübersprungen) werden. Auf diese Weise können Sie Code nachverfolgen und nur bestimmte Funktionen überspringen. Sie kann auch im Quellmodus verwendet werden, um das Schrittweise Ausführen zu steuern, wenn mehrere Funktionsaufrufe in einer Zeile vorhanden sind.
.step_filter "FilterList"
.step_filter /c
.step_filter
Parameter
"FilterList"
Gibt die Symbole an, die funktionen zugeordnet sind, die übersprungen werden sollen. FilterList kann eine beliebige Anzahl von Textmustern enthalten, die durch Semikolons getrennt sind. Jedes dieser Muster kann eine Vielzahl von Wildcards und Bezeichnern enthalten; Weitere Informationen finden Sie unter String Wildcard Syntax . Eine Funktion, deren Symbol mindestens einem dieser Muster entspricht, wird während der Ablaufverfolgung übersprungen. Jedes Mal, wenn "FilterList" verwendet wird, wird jede vorherige Filterliste verworfen und vollständig durch die neue Liste ersetzt.
/c
Löscht die Filterliste.
Environment
Element | Beschreibung |
---|---|
Modi | Benutzermodus, Kernel-Modus |
Ziele | Live, Crash Dump |
Plattformen | Alle |
Hinweise
Ohne Parameter zeigt .step_filter die aktuelle Filterliste an.
In der Regel wird ein Ablaufverfolgungsbefehl (z . B. "t " oder "windbg debug | step into") -Ablaufverfolgungen in einen Funktionsaufruf ausgeführt. Wenn das symbol, das der aufgerufenen Funktion zugeordnet ist, jedoch mit einem muster übereinstimmt, das durch FilterList angegeben wird, wird die Funktion übersprungen – als ob ein Schrittbefehl (z. B. p) verwendet wurde.
Wenn sich der Anweisungszeiger innerhalb von Code befindet, der in der Filterliste aufgeführt ist, treten alle Ablaufverfolgungs- oder Schrittbefehle aus dieser Funktion heraus, z. B. der Gu-Befehl oder die WinDbg Step Out-Schaltfläche. Natürlich würde dieser Filter verhindern, dass ein solcher Code an erster Stelle nachverfolgt wurde, sodass dies nur geschieht, wenn Sie den Filter geändert oder einen Haltepunkt getroffen haben.
Mit dem folgenden Befehl werden beispielsweise Ablaufverfolgungsbefehle über alle CRT-Aufrufe übersprungen:
.step_filter "msvcrt!*"
Der befehl .step_filter ist am nützlichsten, wenn Sie im Quellmodus debuggen, da es mehrere Funktionsaufrufe in einer einzelnen Quellzeile geben kann. Die p - und t-Befehle können nicht verwendet werden, um diese Funktionsaufrufe zu trennen.
In der folgenden Zeile wechselt der Befehl "t" beispielsweise sowohl in "GetTickCount" als auch in "printf", während der Befehl "p" beide Funktionsaufrufe überschritten:
printf( "%x\n", GetTickCount() );
Mit dem Befehl ".step_filter " können Sie einen dieser Aufrufe herausfiltern, während sie weiterhin in die andere nachverfolgt werden.
Da die Funktionen durch Symbol identifiziert werden, kann ein einzelner Filter ein ganzes Modul enthalten. Auf diese Weise können Sie Frameworkfunktionen herausfiltern , z. B. Microsoft Foundation Classes (MFC) oder Active Template Library (ATL)-Aufrufe.
Beim Debuggen im Assemblymodus befindet sich jeder Anruf in einer anderen Zeile, sodass Sie auswählen können, ob Sie zeilenweise eine Schritt- oder Ablaufverfolgung ausführen möchten. Daher ist .step_filter im Assemblymodus nicht sehr nützlich.