Freigeben über


DkmStepper Klasse

Definition

DkmStepper stellt eine Anforderung zum Stufen eines Threads dar. Es erleichtert die Lebensdauer gemeinsam genutzter Objekte zwischen den verschiedenen Laufzeitdebugmonitoren, die am Schrittschritt beteiligt sind.

public ref class DkmStepper : Microsoft::VisualStudio::Debugger::DkmDataContainer, IDisposable
[System.Runtime.InteropServices.Guid("2aae9764-33a3-8fc7-22ff-e27c9de91bda")]
public class DkmStepper : Microsoft.VisualStudio.Debugger.DkmDataContainer, IDisposable
[<System.Runtime.InteropServices.Guid("2aae9764-33a3-8fc7-22ff-e27c9de91bda")>]
type DkmStepper = class
    inherit DkmDataContainer
    interface IDisposable
Public Class DkmStepper
Inherits DkmDataContainer
Implements IDisposable
Vererbung
Vererbung
Attribute
Implementiert

Eigenschaften

CodePath

[Optional] Wenn StepKind "StepIntoSpecific" ist, gibt an, auf welchen Aufruf wir eingehen. Andernfalls ist es NULL.

CrossThreadParent

[Optional] Wenn ein neuer Schritt mit OnCrossThreadStepArbitration erstellt wird, legt der Schritt-Manager dieses Feld so fest, dass es einfach ist, zum ursprünglichen Schritt zurückzukehren, wenn der Kreuzthreadschritt fehlschlägt oder ein Fallback erforderlich ist. Veraltet. Verwenden Sie stattdessen GetCrossThreadParent.

CurrentCodePaths

[Optional] Beim verwalteten Debuggen enthält es alle Codepfade im aktuellen Schrittbereich. Andernfalls ist es NULL.

Diese API wurde in Visual Studio 12 RTM (DkmApiVersion.VS12RTM) eingeführt.

CurrentMethodName

[Optional] Beim verwalteten Debuggen enthält es den aktuellen Methodennamen. Andernfalls ist es NULL.

Diese API wurde in Visual Studio 12 RTM (DkmApiVersion.VS12RTM) eingeführt.

FrameBase

Die Framebasis des ersten Frames am Anfang des Schritts. Dieser Wert wird MAXUINT64, wenn die StartingAddress nicht angegeben wurde.

IsUnloaded

Gibt true zurück, wenn ein "entladenes" Ereignis für dieses Objekt ausgelöst wurde (Beispiel: DkmThread::Unload wird aufgerufen) oder wenn das Objekt geschlossen wurde. Beachten Sie, dass beim Überprüfen dieser status sorgfältig darauf geachtet werden muss, dass die zurückgegebene status nach dem Lesen möglicherweise nicht mehr korrekt ist.

(Geerbt von DkmDataContainer)
ShouldCaptureReturnValue

Beim verwalteten Debuggen gibt er an, ob der Schritt den Rückgabewert während des Schritts erfassen wollte. Der Standardwert ist false.

Diese API wurde in Visual Studio 12 RTM (DkmApiVersion.VS12RTM) eingeführt.

SourceId

Gibt die Quelle eines Objekts an. SourceIds werden verwendet, um die Filterung in Szenarien zu aktivieren, in denen mehrere Komponenten Instanzen einer Klasse erstellen. Beispielsweise können Quell-IDs verwendet werden, um zu bestimmen, ob ein Haltepunkt aus dem AD7 AL stammt (z. B. Benutzer-Haltepunkt oder ein anderer Haltepunkt, der auf SDM-Ebene sichtbar ist) anstelle eines Haltepunkts, der von einer anderen Komponente erstellt werden kann (z. B. ein interner Haltepunkt, der für das Schrittschritt verwendet wird).

StartingAddress

[Optional] Die Anweisungsadresse des Prozesses zu dem Zeitpunkt, zu dem dieser Schritt gestartet wurde. Dies ist NULL, wenn der Schritt aus einem Thread ohne Frames stammt (Skript & nur verwaltet).

StepKind

DkmStepKind beschreibt, wie Sie den Thread stufen, wenn die Step-Methode aufgerufen wird.

StepUnit

DkmStepUnit beschreibt die Granularität des Schritts, wenn die Step-Methode aufgerufen wird.

Thread

DkmThread stellt einen Thread dar, der im Zielprozess ausgeführt wird.

UniqueId

Guid, die diesen DkmStepper eindeutig identifiziert.

Methoden

BeforeEnable()

Vom beendenden Ereignis-Manager aufgerufen, bevor ein Schrittvorgang tatsächlich beginnt Der beendende Ereignis-Manager benachrichtigt alle Runtimeinstanzen, damit sie jeden erforderlichen Zustand einrichten können, bevor der beendende Ereignis-Manager mit dem Blockieren von Funktionsauswertungen beginnt.

Standorteinschränkung: Die API muss von einer Monitor-Komponente aufgerufen werden (Komponentenebene < 100.000).

CancelStepper(DkmRuntimeInstance)

Ermöglicht das Abbrechen eines Schritts nach der Erstellung durch die steuernde Runtime instance. Die aufrufende Runtime-instance muss mit dem aktuellen instance der steuernden Runtime übereinstimmen. Dies wird in der Regel in Crossthreadschrittszenarien verwendet, in denen der ursprüngliche Schritt wieder aktiviert werden kann. Der Schritt-Manager schließt den Schritt und sendet den Schritt nicht abgeschlossen.

Standorteinschränkung: Die API muss von einer Monitor-Komponente aufgerufen werden (Komponentenebene < 100.000).

Close()

Schließt das Schrittobjekt. Dies sollte durch Komponenten geschlossen werden, wenn der Schritt ausgeführt wird, z. B. wenn ein Schritt abgeschlossenes Ereignis unterdrückt wird oder wenn die Schrittschritte nicht initialisiert werden kann. Stepper werden implizit geschlossen, wenn ihr Thread beendet oder der Debugger beendet wird. Sie werden vom Stepping-Manager geschlossen, wenn eine andere Ausführungsanforderung auf Benutzerebene ausgegeben wird.

DkmStepper-Objekte werden automatisch geschlossen, wenn ihr zugeordnetes DkmThread-Objekt geschlossen wird.

Create(DkmThread, DkmInstructionAddress, UInt64, DkmStepKind, DkmStepUnit, Guid, DkmSteppingCodePath, DkmStepper, Boolean, ReadOnlyCollection<DkmSteppingCodePath>, String, DkmDataItem)

DkmStepper-Objekte werden von Komponenten erstellt, die einen Schritt ausführen möchten. Stepper auf Benutzerebene werden vom AD7-AL erstellt. Um ein Schrittobjekt zu initialisieren, muss Enable aufgerufen werden. Schrittobjekte werden aktiv, bis der Schritt abgeschlossen ist oder abgebrochen wird.

Diese API wurde in Visual Studio 12 RTM (DkmApiVersion.VS12RTM) eingeführt.

Create(DkmThread, DkmInstructionAddress, UInt64, DkmStepKind, DkmStepUnit, Guid, DkmSteppingCodePath, DkmStepper, DkmDataItem)

DkmStepper-Objekte werden von Komponenten erstellt, die einen Schritt ausführen möchten. Stepper auf Benutzerebene werden vom AD7-AL erstellt. Um ein Schrittobjekt zu initialisieren, muss Enable aufgerufen werden. Schrittobjekte werden aktiv, bis der Schritt abgeschlossen ist oder abgebrochen wird.

Enable(Boolean)

Wird verwendet, um ein Schrittobjekt zu initialisieren, sodass der Schritt ausgeführt wird, wenn die Ausführung als nächstes fortgesetzt wird. Diese Methode wird vom Schritt-Manager implementiert, indem er einen geeigneten Runtime-Debugmonitor sucht und diesen Runtime-Debugmonitor auffordert, einen Schritt einzurichten. Diese Methode sollte für ein bestimmtes Schrittobjekt nur einmal aufgerufen werden.

Standorteinschränkung: Die API muss von einer Monitor-Komponente aufgerufen werden (Komponentenebene < 100.000).

GetControllingRuntimeInstance()

Gibt die Laufzeit instance zurück, die derzeit die Kontrolle über diesen DkmStepper hat.

Standorteinschränkung: Die API muss von einer Monitor-Komponente aufgerufen werden (Komponentenebene < 100.000).

GetCrossThreadParent()

Verwenden Sie anstelle von CrossThreadParent.

Standorteinschränkung: Die API muss von einer Monitor-Komponente aufgerufen werden (Komponentenebene < 100.000).

Diese API wurde in Visual Studio 16 Update 9 (DkmApiVersion.VS16Update9) eingeführt.

GetDataItem<T>()

Ruft den instance von "T" ab, der diesem Container instance hinzugefügt wurde. Wenn dieser Container kein "T" enthält, gibt diese Funktion NULL zurück.

(Geerbt von DkmDataContainer)
IsExceptionInFlight()

Ruft das Flag auf dem DkmStepper ab, das angibt, ob ein Laufzeitmonitor glaubt, dass sich während dieses Schritts eine Ausnahme im Flug befindet. Dies kann von Laufzeitmonitoren verwendet werden, um das Verhalten des Schritts zu ändern.

Standorteinschränkung: Die API muss von einer Monitor-Komponente aufgerufen werden (Komponentenebene < 100.000).

Diese API wurde in Visual Studio 11 Update 1 (DkmApiVersion.VS11FeaturePack1) eingeführt.

OnCrossThreadStepArbitration(DkmStepArbitrationReason, DkmRuntimeInstance, DkmThread, DkmInstructionAddress, DkmStepper)

Wird von einem Laufzeitmonitor aufgerufen, wenn ein Schritt in einem anderen Thread fortgesetzt wird. Der Stepping-Manager erstellt einen neuen DkmStepper, der für den neuen Thread verwendet werden soll, und initiiert die Schrittschiedssetzung, um zu bestimmen, welche Runtime den Schritt genau wie OnStepArbitration abschließen soll. Der neue Schritt verwendet die gleiche Schrittart und Schritteinheit wie die ursprüngliche Schritteinheit. Es muss eine neue Startanweisungsadresse angegeben werden, die als Startadresse des Schritts festgelegt wird. Der ursprüngliche Schritt bleibt am Leben, und wenn der neue Stepper abgeschlossen ist, unterdrückt der Schritt-Manager das Ereignis und benachrichtigt den ursprünglichen Stepper über den Abschluss.

Standorteinschränkung: Die API muss von einer Monitor-Komponente aufgerufen werden (Komponentenebene < 100.000).

OnReturnValues(ReadOnlyCollection<DkmRawReturnValue>, Boolean)

Auslösen eines ReturnValues-Ereignisses. Komponenten, die die Ereignissenkenschnittstelle implementieren, erhalten die Ereignisbenachrichtigung. Die Steuerung wird zurückgegeben, sobald alle Komponenten benachrichtigt wurden.

OnStepArbitration(DkmStepArbitrationReason, DkmRuntimeInstance)

Wird von einem Laufzeitmonitor aufgerufen, wenn ein Schritt die Grenzen dessen verlassen hat, was der Laufzeitmonitor versteht, oder wenn während eines Schritts ein potenzieller Übergang zu einer anderen Runtime aufgetreten ist. Der Stepping-Manager initiiert die Schrittschiedssetzung, um jedem Laufzeitmonitor die Möglichkeit zu geben, den Prozess zu überprüfen und zu bestimmen, welche Laufzeit den Schritt abschließen soll. Die Runtimes werden in der Prioritätsreihenfolge aufgerufen. Nachdem dieser Prozess abgeschlossen ist, ruft der Schritt-Manager AfterSteppingArbitration auf dem Monitor auf, der die Schiedsbarkeit angefordert hat, damit er auf den neuen Steuerungsmonitor reagieren kann, wenn er einen gefunden hat, oder den Schritt beenden kann, wenn er nicht gefunden wurde.

Standorteinschränkung: Die API muss von einer Monitor-Komponente aufgerufen werden (Komponentenebene < 100.000).

OnStepComplete(DkmThread, Boolean)

Auslösen eines StepComplete-Ereignisses. Komponenten, die die Ereignissenkenschnittstelle implementieren, erhalten die Ereignisbenachrichtigung. Diese Methode queert das Ereignis, und das Steuerelement kehrt sofort zum Aufrufer zurück.

RemoveDataItem<T>()

Entfernen Sie den instance von "T" aus diesem Container. Es ist in der Regel nicht erforderlich, diese Methode aufzurufen, da ein Datencontainer automatisch geleert wird, wenn das Objekt geschlossen wird.

(Geerbt von DkmDataContainer)
SetDataItem<T>(DkmDataCreationDisposition, T)

Platzieren Sie ein neues Element im Datencontainer.

(Geerbt von DkmDataContainer)
SetExceptionInFlight(Boolean)

Laufzeitmonitore rufen dies auf, um ein Flag auf dem DkmStepper festzulegen oder zu löschen, das von kooperierenden Runtimes verwendet werden kann, um das Verhalten des Schritts zu ändern, wenn eine Ausnahme im Flight aktuell ist. Wird von Runtime-Monitoren aufgerufen, wenn beim Schrittweisen eine Ausnahme auftritt.

Standorteinschränkung: Die API muss von einer Monitor-Komponente aufgerufen werden (Komponentenebene < 100.000).

Diese API wurde in Visual Studio 11 Update 1 (DkmApiVersion.VS11FeaturePack1) eingeführt.

StepControlRequested(DkmStepArbitrationReason, DkmRuntimeInstance)

StepControlRequested wird aufgerufen, wenn eine nicht steuernde Runtime instance erkennt, dass der Thread einen Übergang in seine Runtime erreicht hat. Der Stepping-Manager leitet den Aufruf an die aktuelle steuernde Runtime instance weiter. Wenn die aktuelle steuernde Runtime instance das Schrittschritt beenden kann, sollte sie Gewährt auf true festlegen. Die tatsächliche Steuerung wird erst dann erteilt, wenn die anfordernde Runtime DkmStepper.TakeStepControl aufruft. Dieser zweiteilige Prozess ermöglicht es Anrufern, die Steuerung mehrerer Stepper gleichzeitig anzufordern.

Standorteinschränkung: Die API muss von einer Monitor-Komponente aufgerufen werden (Komponentenebene < 100.000).

TakeStepControl(Boolean, DkmStepArbitrationReason, DkmRuntimeInstance)

TakeStepControl wird aufgerufen, wenn eine nicht steuernde Runtime instance erkennt, dass der Thread einen Übergang zur Laufzeit erreicht hat. Der Stepping-Manager leitet den Aufruf an die aktuelle steuernde Runtime instance weiter. Die Runtime instance das Steuerelement anfordern, sollte zuerst StepControlRequested für alle Stepper aufrufen, die sie steuern möchte. Wenn sie alle Gewährt auf true festlegen, sollte die Runtime instance diese Methode dann für jeden Schritt aufrufen, den sie steuert.

Standorteinschränkung: Die API muss von einer Monitor-Komponente aufgerufen werden (Komponentenebene < 100.000).

Explizite Schnittstellenimplementierungen

IDisposable.Dispose()

Muss hinzugefügt werden.

Gilt für: