Steuern von Haltepunktflags und Parametern

Es gibt eine Reihe von Methoden, mit denen grundlegende Informationen zu Haltepunkten bestimmt werden können:

  • GetId gibt die Breakpoint-ID zurück.

  • GetType gibt den Breakpointtyp (Software oder Prozessor) und den Typ des effektiven Prozessors zurück, auf dem der Breakpoint festgelegt ist.

  • GetAdder gibt den Client zurück, der den Haltepunkt hinzugefügt hat.

  • GetOffset gibt die Adresse eines Haltepunkts zurück.

  • GetOffsetExpression gibt die Ausdruckszeichenfolge zurück, die die Position des Haltepunkts angibt.

Zusätzlich zu seiner Position und seinem Haltepunkttyp verfügt ein Haltepunkt über mehrere Parameter, die sein Verhalten steuern.

Haltepunktparameter können über eine Vielzahl von bestimmten Methoden gesteuert werden. Darüber hinaus können die meisten Parameter zusammen mit GetParameters abgefragt werden.

Haltepunktflags

Haltepunktflags sind eine Art von Haltepunktparametern.

Haltepunktflags können mit GetFlags abgefragt werden. Sie können mit AddFlags, RemoveFlags oder SetFlags geändert werden.

Haltepunktflags bilden ein Bitfeld. Die möglichen Flags, die in diesem Bitfeld verwendet werden können, und ihre Bedeutung sind wie folgt:

DEBUG_BREAKPOINT_ENABLED
Wenn dieses Flag festgelegt ist, wird der Haltepunkt aktiviert und hat seine normale Wirkung. Wenn dieses Flag nicht festgelegt ist, ist der Haltepunkt deaktiviert und hat keine Auswirkungen. Wenn Sie einen Haltepunkt vorübergehend deaktivieren möchten, können Sie dieses Flag entfernen. Es ist dann einfach, dieses Flag wieder hinzuzufügen, wenn Sie diesen Haltepunkt erneut aktivieren möchten.

DEBUG_BREAKPOINT_ADDER_ONLY
Wenn dieses Flag festgelegt ist, ist der Haltepunkt ein privater Haltepunkt. Dieser Haltepunkt ist nur für den Client sichtbar, der ihn hinzugefügt hat. In diesem Fall können andere Clients die Engine nicht nach dem Breakpoint abfragen, und die Engine sendet keine Ereignisse, die vom Haltepunkt generiert wurden, an andere Clients. Alle Rückrufe (Ereignis und Ausgabe) im Zusammenhang mit diesem Haltepunkt werden nur an diesen Client gesendet. Siehe GetAdder.

DEBUG_BREAKPOINT_GO_ONLY
Wenn dieses Flag festgelegt ist, wird der Haltepunkt nur ausgelöst, wenn sich das Ziel in uneingeschränkter Ausführung befindet. Sie wird nicht ausgelöst, wenn die Engine die Anweisungen im Ziel durchschritten hat.

DEBUG_BREAKPOINT_ONE_SHOT
Wenn dieses Flag festgelegt ist, entfernt sich der Haltepunkt automatisch, wenn er zum ersten Mal ausgelöst wird.

DEBUG_BREAKPOINT_DEFERRED
Wenn dieses Flag festgelegt ist, wird der Haltepunkt verzögert. Dieses Flag wird von der Engine festgelegt, wenn der Offset des Haltepunkts mithilfe eines symbolischen Ausdrucks angegeben wird und die Engine den Ausdruck nicht auswerten kann. Jedes Mal, wenn ein Modul geladen oder nicht in das Ziel gesetzt wird, versucht die Engine, den Ausdruck für alle Haltepunkte neu zu bewerten, deren Position mithilfe eines Ausdrucks angegeben wird. Diejenigen, die nicht ausgewertet werden können, werden als verzögert gekennzeichnet. Dieses Flag kann von einem Client nicht geändert werden.

Andere Haltepunktparameter

Haltepunktparameter umfassen auch Folgendes:

Anzahl der Durchgangs
Wenn dem Haltepunkt eine Durchgangsanzahl zugeordnet ist, wird er erst aktiviert, wenn das Ziel den Haltepunkt so oft wie angegeben übergeben hat. Die ursprünglich festgelegte Passanzahl kann mit getPassCount gefunden werden. Die Anzahl der verbleibenden Zeit, die die Engine den Breakpoint vor der Aktivierung überbricht, kann mit GetCurrentPassCount gefunden werden. Die Anzahl der Durchgangswerte kann mithilfe von SetPassCount auf einen neuen Wert zurückgesetzt werden.

Übereinstimmungsthread
Wenn dem Haltepunkt ein Thread zugeordnet ist, wird er von der Engine ignoriert, wenn er von einem anderen Thread gefunden wird. Der Thread kann mit getMatchThreadId gefunden und mithilfe von SetMatchThreadId geändert werden.

Befehl
Dem Haltepunkt kann ein Befehl zugeordnet sein. Der Befehl wird ausgeführt, wenn der Haltepunkt aktiviert wird. Dieser Befehl kann mit GetCommand gefunden und mithilfe von SetCommand geändert werden.

Größe
Wenn der Breakpoint ein Prozessor-Breakpoint ist, muss er eine angegebene Größe haben. Dies bestimmt die Größe des Speicherblocks, dessen Zugriff den Breakpoint aktiviert. Der Anfang des Blocks ist die Position des Haltepunkts. Die Größe kann mit getDataParameters gefunden und mithilfe von SetDataParameters geändert werden.

Zugriffstyp
Wenn der Breakpoint ein Prozessor-Breakpoint ist, muss er über einen Zugriffstyp verfügen. Dadurch wird der Zugriffstyp bestimmt, durch den der Haltepunkt aktiviert wird. Beispielsweise kann der Haltepunkt aktiviert werden, wenn das Ziel den durch den Haltepunkt angegebenen Speicher liest, in diesen schreibt oder diesen ausgeführt. Der Zugriffstyp kann mit getDataParameters gefunden und mithilfe von SetDataParameters geändert werden.

Gültige Parameter für Prozessor-Breakpoints

Die folgenden Zugriffstypen sind für Prozessor-Breakpoints verfügbar:

Wert Beschreibung

DEBUG_BREAK_READ

Der Haltepunkt wird ausgelöst, wenn die CPU Arbeitsspeicher im Speicherblock des Haltepunkts liest.

DEBUG_BREAK_WRITE

Der Haltepunkt wird ausgelöst, wenn die CPU Arbeitsspeicher in den Speicherblock des Haltepunkts schreibt.

DEBUG_BREAK_READ | DEBUG_BREAK_WRITE

Der Haltepunkt wird ausgelöst, wenn die CPU Arbeitsspeicher im Speicherblock des Haltepunkts liest oder schreibt.

DEBUG_BREAK_EXECUTE

Der Haltepunkt wird ausgelöst, wenn die CPU die Anweisung im Speicherblock des Haltepunkts abruft.

DEBUG_BREAK_IO

Der Haltepunkt wird ausgelöst, wenn auf den E/A-Port im Haltepunktspeicherblock zugegriffen wird. (Windows XP und Microsoft Windows Server 2003, nur Kernelmodus, nur x86)

Nicht alle Zugriffstypen und -größen werden auf allen Prozessoren unterstützt. Die folgenden Zugriffstypen und -größen werden unterstützt:

x86
Alle Zugriffstypen werden unterstützt. DEBUG_BREAK_READ verhält sich wie DEBUG_BREAK_READ | DEBUG_BREAK_WRITE. Die Größe muss 1, 2 oder 4 sein. Die Adresse des Haltepunkts muss ein Vielfaches der Größe sein.

x64
Alle Zugriffstypen werden unterstützt. DEBUG_BREAK_READ verhält sich wie DEBUG_BREAK_READ | DEBUG_BREAK_WRITE. Die Größe muss 1, 2, 4 oder 8 sein. Die Adresse des Haltepunkts muss ein Vielfaches der Größe sein.