Freigeben über


DkmThread Klasse

Definition

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

Abgeleitete Klassen: DkmGPUComputeThread, DkmVirtualThread

public ref class DkmThread : Microsoft::VisualStudio::Debugger::DkmDataContainer
[System.Runtime.InteropServices.Guid("ac420a23-b721-57c1-375d-a5053f90f94c")]
public class DkmThread : Microsoft.VisualStudio.Debugger.DkmDataContainer
[<System.Runtime.InteropServices.Guid("ac420a23-b721-57c1-375d-a5053f90f94c")>]
type DkmThread = class
    inherit DkmDataContainer
Public Class DkmThread
Inherits DkmDataContainer
Vererbung
Vererbung
Abgeleitet
Attribute

Eigenschaften

Connection

Dies stellt eine Verbindung zwischen dem Monitor und der IDE dar. Es kann entweder eine lokale Verbindung sein, wenn der Monitor im selben Prozess wie die IDE ausgeführt wird, oder es kann sich um eine Remoteverbindung handelt. Im Überwachungsprozess besteht nur eine Verbindung.

IsMainThread

True, wenn dies der Standard Thread dieses Prozesses ist. Der Standard Thread ist der erste Thread, der gestartet wird.

IsUnloaded

Gibt true zurück, wenn ein "unloaded"-Ereignis für dieses Objekt ausgelöst wurde (Beispiel: DkmThread::Unload wird aufgerufen) oder wenn das Objekt geschlossen wurde. Beachten Sie, dass bei der Überprüfung dieses status Vorsicht erforderlich ist, da die zurückgegebene status ohne Synchronisierung die Anweisung nach dem Lesen möglicherweise nicht mehr korrekt ist.

(Geerbt von DkmDataContainer)
NativeStartAddress

Falls verfügbar, ist dies die Win32-Startadresse dieses Threads (Wert, der an die CreateThread-API übergeben wird). Der Wert ist nicht immer verfügbar, z. B. ist er in Szenarien, in denen der Thread nach dem Anfügen des Debuggers oder in Minidumps gestartet wurde, in der Regel nicht verfügbar.

Process

DkmProcess stellt einen Zielprozess dar, der debuggt wird. Der Debugger debugt Prozesse, sodass dies die grundlegende Einheit des Debuggens ist. Ein DkmProcess kann einen Systemprozess oder einen virtuellen Prozess wie Minidumps darstellen.

SystemInformation

Enthält Informationen zum Computersystem, unter dem dieser Thread ausgeführt wird. Wenn dieser Thread unter WOW (32-Bit-Emulation auf einem 64-Bit-Betriebssystem) ausgeführt wird, gelten diese Informationen für das 32-Bit-Subsystem und nicht für das 64-Bit-Subsystem.

SystemPart

[Optional] Beschreibt Merkmale des Threads, die für einen vollständigen Win32-Thread relevant sind. Derzeit ist dieser Wert erforderlich, und alle Threads verfügen über einen "System"-Block. In Zukunft kann dieser Wert NULL sein, wenn der DkmThread etwas anderes als einen vollständigen Win32-Thread darstellt.

TebAddress

Adresse innerhalb des Zielprozesses, in dem der Win32-Threadumgebungsblock gespeichert ist. Weitere Informationen finden Sie in der Dokumentation zur TEB-Struktur in MSDN.

UniqueId

Guid, die dieses Threadobjekt eindeutig identifiziert.

Methoden

BeginFuncEvalExecution(DkmFuncEvalFlags)

Diese Methode wird verwendet, um den Zielprozess fortzusetzen, sodass eine Funktionsauswertung erfolgen kann. Diese Funktion wird von einem Laufzeitdebugmonitor aufgerufen, nachdem eine Funktionsauswertung eingerichtet wurde, um den Zielprozess auszuführen. Der Laufzeitmonitor aktualisiert zunächst den Threadkontext, aktualisiert den erforderlichen Arbeitsspeicher im Zielprozess und richtet alle Erkennungen ein, die die Funktionsauswertung abgeschlossen haben.

Aufrufer dieser Methode MÜSSEN immer EndFuncEvalExecution aufrufen, bevor sie von dem Vorgang zurückkehren, der die Funktionsauswertung ausgelöst hat. Das Verhalten ist nicht definiert, wenn ein Aufrufer dies nicht tut.

Diese Methode wird im Basisdebugmonitor implementiert, indem zuerst der Zielprozess so aktualisiert wird, dass er sich im Funktionsauswertungsmodus befindet (DkmThread.OnBeginFuncEvalExecution), dann Threads anhalten und/oder fortsetzen, wie in den Funktionsauswertungsflags angegeben, und schließlich den Zielprozess fortsetzen.

Diese Methode kann von einem beliebigen Thread aufgerufen werden. OnBeginFuncEvalExecution muss jedoch vom Beenden des Ereignisthreads aufgerufen werden, sodass der Basisdebugmonitor möglicherweise als Threadwechsel im Rahmen der Implementierung dieser Methode ausgeführt werden muss. Der Basisdebugmonitor sollte erst nach dem Fortsetzen des Ziels von BeginFuncEvalExecution zurückkehren.

CanBeginFuncEvalExecution(DkmFuncEvalFlags)

CanBeginFuncEvalExecution kann aufgerufen werden, um zu verstehen, ob der aktuelle Status des Prozesses Funktionsauswertungen zulässt. Dadurch wird false zurückgegeben, z. B. wenn die Basis-DM "StoppingEventProcessingBegin", aber nicht "StoppingEventProcessingContinue" aufgerufen hat.

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

Diese API wurde in Visual Studio 16 Update 5 (DkmApiVersion.VS16Update5) eingeführt.

Create(DkmProcess, UInt64, UInt64, Boolean, DkmThread+System, DkmDataItem)

DkmThread wird von einem Debugmonitor aufgerufen, um eine neue DkmThread-instance zu erstellen. DkmThread-Objekte für Systemthreads werden vom Basisdebugmonitor erstellt. Diese Methode muss im Ereignisthread aufgerufen werden.

Diese Methode sendet ein ThreadCreate-Ereignis.

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

CreateFrameRegisters(DkmUnwoundRegister[], UInt32)

Konvertieren Sie ein Array von DkmUnwoundRegisters in eine instance von DkmFrameRegisters, die eine sortierte DkmReadOnlyCollection von DkmUnwoundRegisters enthält.

CreateRegistersObject(Byte[], DkmUnwoundRegister[], DkmUnwoundRegister[])

Erstellt ein DkmFrameRegisters-Objekt aus dem angegebenen Bytearray, das eine Win32 CONTEXT-Struktur enthält.

EndFuncEvalExecution(DkmFuncEvalFlags)

EndFuncEvalExecution wird vom Debugmonitor der Laufzeit im Ereignisthread aufgerufen, um den Funktionsauswertungsmodus zu beenden. EndFuncEvalExecution aktualisiert den internen Zustand des DkmProcess-Objekts, um anzugeben, dass die Funktionsauswertung beendet wurde. Dadurch wird auch ein FuncEvalEnded-Ereignis gesendet, und der Prozess wird als beendet markiert.

Diese Methode kann aufgerufen werden (1), während eine "empfangene" Beendigungsereignisbenachrichtigung verarbeitet wird, oder ( 2) während der Verarbeitung eines nicht beendenden Ereignisses, z. B. thread exit, oder (3), während das Ziel noch angehalten wird, z. B. wenn die Einrichtung der Funktionsauswertung fehlgeschlagen ist.

GetContext(Int32, Byte[])

Rufen Sie den aktuellen Kontext (Registerwerte) eines Threads ab.

GetContext(Int32, Void*, Int32)

Rufen Sie den aktuellen Kontext (Registerwerte) eines Threads ab.

GetCurrentFrameInfo(UInt64, UInt64, UInt64)

GetCurrentFrameInfo wird verwendet, um die Framebasis und die Rückgabeadresse für den aktuellen Kontext des Threads abzurufen. Dies berücksichtigt die Auslassung von Framepointer und wenn der aktuelle Anweisungszeiger in einem Prolog, Epilog usw. ist... HINWEIS: In einigen Fällen wird dies falsch angezeigt, wenn der Frame den Frame zeiger ausgelassen hat und keine Symbole geladen sind.

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

GetCurrentFuncEvalMode()

GetCurrentFuncEvalMode kann von Komponenten im Rahmen der Ereignisverarbeitung aufgerufen werden, um zu bestimmen, ob die Funktionsauswertung aktiviert ist. Diese Funktion kann nur im Rahmen der Ereignisverarbeitung aufgerufen werden.

GetCurrentLocation(DkmWorkList, DkmCompletionRoutine<DkmGetCurrentLocationAsyncResult>)

Gibt die Position eines Threads an, wie er im Threadfenster oder in der Dropdownliste auf der Symbolleiste des Debugspeicherorts angezeigt wird.

Diese Methode fügt ein neues Arbeitselement an die angegebene Arbeitsliste an und gibt zurück, sobald das Arbeitselement angefügt wurde. Die tatsächliche Verarbeitung des Arbeitselements erfolgt asynchron. Der Aufrufer wird benachrichtigt, dass die Anforderung durch die Vervollständigungsroutine abgeschlossen ist.

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

GetCurrentRegisters(DkmUnwoundRegister[])

Gibt ein DkmFrameRegisters-Objekt zurück, das die aktuellen Registerwerte des Threads enthält.

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)
GetDebuggerSuspensionCount()

Gibt die Gesamtzahl der Vom Debugger verursachten Unterbrechungen zurück (d. h. Aufrufe von DkmThread::Suspend ohne Einen Aufruf von DkmThread::Resume). Dies schließt alle Unterbrechungen außerhalb des Debuggers aus.

GetExtendedRegisters()

Ruft die erweiterten Register aus dem Threadkontext ab.

GetManagedThreadProperties(DkmWorkList, DkmCompletionRoutine<DkmGetManagedThreadPropertiesAsyncResult>)

Ruft die Eigenschaften eines verwalteten Threads ab.

Diese Methode fügt ein neues Arbeitselement an die angegebene Arbeitsliste an und gibt zurück, sobald das Arbeitselement angefügt wurde. Die tatsächliche Verarbeitung des Arbeitselements erfolgt asynchron. Der Aufrufer wird benachrichtigt, dass die Anforderung durch die Vervollständigungsroutine abgeschlossen ist.

GetManagedThreadProperties(Int32)

Ruft die Eigenschaften eines verwalteten Threads ab.

GetMinidumpThreadInfo(DkmMinidumpThreadInfo)

Ruft threadzustandsinformationen ab, die im Minidump gespeichert sind.

Diese API wurde in Visual Studio 17 RTM (DkmApiVersion.VS17RTM) eingeführt.

GetStackAddressRange()

Ruft das Stapellimit bzw. die Stapelbasis des angegebenen Threads ab. Beachten Sie, dass sich dieser Wert im Laufe der Zeit ändern kann, z. B. bei Fasern.

GetSteppers()

GetSteppers listet die DkmStepper-Elemente dieses DkmThread-Objekts auf.

GetSuspensionCount(Boolean)

Gibt die aktuelle Anzahl der Unterbrechungen dieses Threads zurück.

GetSuspensionCount(DkmWorkList, Boolean, DkmCompletionRoutine<DkmGetSuspensionCountAsyncResult>)

Gibt die aktuelle Anzahl der Unterbrechungen dieses Threads zurück.

Diese Methode fügt ein neues Arbeitselement an die angegebene Arbeitsliste an und gibt zurück, sobald das Arbeitselement angefügt wurde. Die tatsächliche Verarbeitung des Arbeitselements erfolgt asynchron. Der Aufrufer wird benachrichtigt, dass die Anforderung durch die Vervollständigungsroutine abgeschlossen ist.

GetThreadCurrentWinRtErrorInfo()

GetThreadCurrentWinRtErrorInfo wird verwendet, um die Adresse des aktuellen IErrorInfo-Objekts für diesen Thread abzurufen.

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

GetTlsValue(Int32)

Ruft den Wert im threadlokalen Speichers (TLS) des Debugthreads für den angegebenen TLS-Index ab. Jeder Thread eines Prozesses hat seinen eigenen Slot für jeden TLS-Index.

GetTopStackFrame()

Gibt den oberen Aufrufstapelrahmen für einen Thread zurück. Dieser Wert wird normalerweise nach dem ersten Stapellauf zwischengespeichert und beim Fortfahren gelöscht. Dies kann nur über dem Stapelanbieter im Clientprozess aufgerufen werden. Rufen Sie GetTopStackWalkFrame auf, um den obersten Frame im Serverprozess abzurufen.

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

GetTopStackWalkFrame(DkmRuntimeInstance)

Gibt den oberen Stapelrahmen für einen Thread zurück. Dieser Frame kann aus einem Runtime-instance oder einem Monitorentladungsmodul stammen. Dies kann nur vom Serverprozess aufgerufen werden. Verwenden Sie GetTopStackFrame, um den obersten Frame im Clientprozess abzurufen.

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

GetVolatileFlags()

Ruft flüchtige Flags für einen Thread ab. Geben Sie für instance zurück, wenn ein Thread ein geplanter Thread im Benutzermodus ist.

GetVolatileFlags(DkmWorkList, DkmCompletionRoutine<DkmGetVolatileFlagsAsyncResult>)

Ruft flüchtige Flags für einen Thread ab. Geben Sie für instance zurück, wenn es sich bei einem Thread um einen geplanten Thread im Benutzermodus handelt.

Diese Methode fügt ein neues Arbeitselement an die angegebene Arbeitsliste an und gibt zurück, nachdem das Arbeitselement angefügt wurde. Die tatsächliche Verarbeitung des Arbeitselements erfolgt asynchron. Der Aufrufer wird benachrichtigt, dass die Anforderung durch die Vervollständigungsroutine abgeschlossen ist.

GetVolatileProperties(DkmWorkList, DkmCompletionRoutine<DkmGetVolatilePropertiesAsyncResult>)

Rufen Sie die dynamischen Eigenschaften eines Threads ab.

Diese Methode fügt ein neues Arbeitselement an die angegebene Arbeitsliste an und gibt zurück, nachdem das Arbeitselement angefügt wurde. Die tatsächliche Verarbeitung des Arbeitselements erfolgt asynchron. Der Aufrufer wird benachrichtigt, dass die Anforderung durch die Vervollständigungsroutine abgeschlossen ist.

GetVolatileProperties(Int32, UInt64)

Rufen Sie die dynamischen Eigenschaften eines Threads ab.

IsStoppingEventQueued(Boolean)

Gibt an, ob der angegebene Thread ein Beendenereignis in der Warteschlange aufweist. Diese Informationen werden vom Ausführungs-Manager verwendet, um zu entscheiden, ob ein Thread verrutscht werden kann.

OnBeginFuncEvalExecution(DkmFuncEvalFlags)

OnBeginFuncEvalExecution wird vom Basisdebugmonitor für den Ereignisthread aufgerufen. Diese Methode wird als Teil der Implementierung von IDkmBaseFuncEvalService.BeginFuncEvalExecution aufgerufen, die aufgerufen wird, um den Prozess für eine Funktionsauswertung fortzusetzen. OnBeginFuncEvalExecution aktualisiert den internen Zustand des DkmProcess-Objekts, um anzugeben, dass eine Funktionsauswertung ausgeführt wird. Dadurch wird auch ein FuncEvalStarting-Ereignis gesendet, das den Prozess als ausgeführt markiert, sodass keine Vorgänge zulässig sind, die einen beendeten Prozess erfordern.

OnContinueExecution()

OnContinueExecution wird vom Basisdebugmonitor für den Ereignisthread aufgerufen. Diese Methode wird als Teil der Implementierung von IDkmContinueExecution.ContinueExecution aufgerufen, die von der IDE verwendet wird, um den Zielprozess fortzusetzen. Diese Methode wird vom Dispatcher verwendet, um entweder Stoppereignisse zu senden, die zuvor nicht verarbeitet werden konnten, oder um den internen Zustand des DkmProcess-Objekts zu aktualisieren, um anzugeben, dass der Zielprozess jetzt ausgeführt wird. Bevor der Prozess als ausgeführt markiert wird, sendet der Dispatcher ein Continue-Ereignis.

Ein Basisdebugmonitor sollte erwarten, dass er wiederholt aufgerufen wird, während er sich in dieser Methode befindet.

OnEmbeddedBreakpointHit(DkmInstructionAddress, Boolean)

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

OnInterceptExceptionCompleted(UInt64)

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

OnThreadNameChange()

ThreadNameChange wird vom Dispatcher gesendet, wenn DkmThread::NameChange vom Monitor aufgerufen wird.

Diese API wurde in Visual Studio 14 RTM (DkmApiVersion.VS14RTM) eingeführt.

RaiseExecutionControlException(UInt32)

API, die von einer IDkmSingleStepCompleteReceived- oder IDkmRuntimeBreakpointReceived-Implementierung aufgerufen werden kann, um zu erzwingen, dass das Basis-DM die EXCEPTION_BREAKPOINT- oder EXCEPTION_SINGLE_STEP Ausnahme im Zielprozess auslöst, wenn die Ausführung fortgesetzt wird. Normalerweise wird der Breakpoint oder die Einzelschritt-Ausnahme implizit unterdrückt. Dadurch können die EXCEPTION_BREAKPOINT/EXCEPTION_SINGLE_STEP von Ausnahmehandlern innerhalb des Zielprozesses verarbeitet werden. Diese API schlägt fehl, wenn der Thread derzeit nicht an einem Schritt abgeschlossen oder an einem Breakpointereignis sitzt.

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

RemoveDataItem<T>()

Entfernen Sie die 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)
Resume(Boolean)

Setzen Sie diesen Thread fort.

SetContext(Byte[])

Aktualisieren Sie den Kontext (Registerwerte) eines Threads.

SetDataItem<T>(DkmDataCreationDisposition, T)

Platzieren Sie ein neues Element im Datencontainer.

(Geerbt von DkmDataContainer)
SetExtendedRegisterValue(Int32, ReadOnlyCollection<Byte>)

Legt den Wert des erweiterten Registers im Kontext des Threads fest.

SetTlsValue(Int32, UInt64)

Speichert einen Wert im Tls-Slot (Lokaler Threadspeicher) des Debuggeethreads für den angegebenen TLS-Index. Jeder Thread eines Prozesses hat seinen eigenen Slot für jeden TLS-Index.

Suspend(Boolean)

Setzen Sie diesen Thread an.

Unload(Int32)

ThreadExit wird vom Dispatcher gesendet, wenn DkmThread::Unload vom Monitor aufgerufen wird.

Diese Methode kann nur von der Komponente aufgerufen werden, die das Objekt erstellt hat.

Gilt für: