Condividi tramite


DkmThread Classe

Definizione

DkmThread rappresenta un thread in esecuzione nel processo di destinazione.

Classi derivate: 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
Ereditarietà
Ereditarietà
Derivato
Attributi

Proprietà

Connection

Rappresenta una connessione tra il monitoraggio e l'IDE. Può trattarsi di una connessione locale se il monitoraggio è in esecuzione nello stesso processo dell'IDE oppure può essere una connessione remota. Nel processo di monitoraggio è presente una sola connessione.

IsMainThread

True se si tratta del thread principale di questo processo. Il thread principale è il primo thread da avviare.

IsUnloaded

Restituisce true se per questo oggetto è stato generato un evento 'unloaded', ad esempio DkmThread::Unload, o se l'oggetto è stato chiuso. Si noti che è necessario prestare attenzione quando si controlla questo stato come, senza sincronizzazione, lo stato restituito potrebbe non essere più accurato dopo la lettura.

(Ereditato da DkmDataContainer)
NativeStartAddress

Se disponibile, si tratta dell'indirizzo iniziale Win32 di questo thread (valore passato all'API CreateThread). Il valore non sarà sempre disponibile, ad esempio, in genere non è disponibile negli scenari in cui il thread è stato avviato dopo il debugger collegato o in minidump.

Process

DkmProcess rappresenta un processo di destinazione di cui viene eseguito il debug. Il debugger esegue il debug dei processi, quindi si tratta dell'unità di base del debug. Un DkmProcess può rappresentare un processo di sistema o un processo virtuale, ad esempio minidump.

SystemInformation

Contiene informazioni sul sistema del computer in cui è in esecuzione questo thread. Se questo thread è in esecuzione in WOW (emulazione a 32 bit in un sistema operativo a 64 bit), queste informazioni saranno relative al sottosistema a 32 bit anziché al sottosistema a 64 bit.

SystemPart

[Facoltativo] Descrive i tratti del thread rilevanti per un thread Win32 completo. Attualmente, questo valore è obbligatorio e tutti i thread avranno un blocco "System". In futuro, questo valore può essere NULL se DkmThread rappresenta un valore diverso da un thread Win32 completo.

TebAddress

Indirizzo all'interno del processo di destinazione, in cui è archiviato il blocco di ambiente thread Win32. Per altre informazioni, vedere la documentazione sulla struttura TEB in MSDN.

UniqueId

GUID che identifica in modo univoco questo oggetto thread.

Metodi

BeginFuncEvalExecution(DkmFuncEvalFlags)

Questo metodo viene usato per riprendere il processo di destinazione in modo che possa verificarsi una valutazione della funzione. Questa funzione viene chiamata da un monitoraggio di debug di runtime dopo aver configurato una valutazione della funzione per eseguire il processo di destinazione. Il monitoraggio di runtime aggiornerà prima il contesto del thread, aggiornerà la memoria necessaria nel processo di destinazione e configura il rilevamento completato dalla valutazione della funzione.

I chiamanti di questo metodo DEVONO chiamare sempre EndFuncEvalExecution prima di restituire dall'operazione che ha attivato la valutazione della funzione. Il comportamento non è definito se un chiamante non riesce a farlo.

Questo metodo viene implementato nel monitoraggio di debug di base aggiornando prima il processo di destinazione in modalità di valutazione della funzione (DkmThread.OnBeginFuncEvalExecution), quindi sospendendo e/o riprendendo i thread come specificato dai flag di valutazione della funzione e infine continuando il processo di destinazione.

Questo metodo può essere chiamato da qualsiasi thread, tuttavia OnBeginFuncEvalExecution deve essere chiamato dal thread dell'evento di arresto, quindi il monitoraggio di debug di base potrebbe dover eseguire come commutatore di thread come parte dell'implementazione di questo metodo. Il monitoraggio di debug di base non deve essere restituito da BeginFuncEvalExecution fino a quando la destinazione non è stata ripresa.

CanBeginFuncEvalExecution(DkmFuncEvalFlags)

CanBeginFuncEvalExecution può essere chiamato per capire se lo stato corrente del processo consente le valutazioni delle funzioni. Verrà restituito false, ad esempio, se la dm di base ha chiamato StoppingEventProcessingBegin, ma non StoppingEventProcessingContinue.

Vincolo location: l'API deve essere chiamata da un componente Monitor (livello < componente 100.000).

Questa API è stata introdotta in Visual Studio 16 Update 5 (DkmApiVersion.VS16Update5).

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

DkmThread viene chiamato da un monitoraggio di debug per creare una nuova istanza DkmThread. Gli oggetti DkmThread per i thread di sistema vengono creati dal monitoraggio di debug di base. Questo metodo deve essere chiamato nel thread dell'evento.

Questo metodo invierà un evento ThreadCreate.

Vincolo location: l'API deve essere chiamata da un componente Monitor (livello < componente 100.000).

CreateFrameRegisters(DkmUnwoundRegister[], UInt32)

Convertire una matrice di DkmUnwoundRegisters in un'istanza di DkmFrameRegisters contenente un oggetto DkmReadOnlyCollection ordinato di DkmUnwoundRegisters.

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

Crea un oggetto DkmFrameRegisters dalla matrice di byte fornita contenente una struttura CONTEXT Win32.

EndFuncEvalExecution(DkmFuncEvalFlags)

EndFuncEvalExecution viene chiamato dal monitoraggio del debug di runtime nel thread di eventi per uscire dalla modalità di valutazione della funzione. EndFuncEvalExecution aggiornerà lo stato interno dell'oggetto DkmProcess per indicare che la valutazione della funzione è terminata. Verrà inoltre inviato un evento FuncEvalEnded e il processo verrà contrassegnato come arrestato.

Questo metodo può essere chiamato (1) durante l'elaborazione di una notifica degli eventi di arresto 'received' oppure- (2) durante l'elaborazione di un evento non di arresto, ad esempio l'uscita del thread, -oppure- (3) mentre la destinazione è ancora arrestata, ad esempio se l'installazione della valutazione della funzione non è riuscita.

GetContext(Int32, Byte[])

Ottenere il contesto corrente (valori di registro) di un thread.

GetContext(Int32, Void*, Int32)

Ottenere il contesto corrente (valori di registro) di un thread.

GetCurrentFrameInfo(UInt64, UInt64, UInt64)

GetCurrentFrameInfo viene usato per ottenere la base del frame e l'indirizzo restituito per il contesto corrente del thread. Questo prende in considerazione l'omissione del puntatore frame e se il puntatore dell'istruzione corrente si trova in un prologo, epilogo e così via... NOTA: in alcuni casi questo errore si verifica se il frame ha omissione del puntatore a frame e non sono presenti simboli caricati.

Vincolo location: l'API deve essere chiamata da un componente Monitor (livello < componente 100.000).

GetCurrentFuncEvalMode()

GetCurrentFuncEvalMode può essere chiamato dai componenti come parte dell'elaborazione di eventi per determinare se la valutazione della funzione è abilitata. Questa funzione può essere chiamata solo come parte dell'elaborazione di eventi.

GetCurrentLocation(DkmWorkList, DkmCompletionRoutine<DkmGetCurrentLocationAsyncResult>)

Fornisce il percorso di un thread, come visibile nella finestra dei thread o nell'elenco a discesa thread nella barra degli strumenti del percorso di debug.

Questo metodo aggiungerà un nuovo elemento di lavoro all'elenco di lavoro specificato e restituirà una volta accodato l'elemento di lavoro. L'elaborazione effettiva dell'elemento di lavoro è asincrona. Il chiamante riceverà una notifica che la richiesta viene completata tramite la routine di completamento.

Vincolo location: l'API deve essere chiamata da un componente IDE (livello > componente 100.000).

GetCurrentRegisters(DkmUnwoundRegister[])

Restituisce un oggetto DkmFrameRegisters contenente i valori del registro corrente del thread.

GetDataItem<T>()

Ottiene l'istanza di 'T' aggiunta a questa istanza del contenitore. Se questo contenitore non contiene un 'T', questa funzione restituirà Null.

(Ereditato da DkmDataContainer)
GetDebuggerSuspensionCount()

Restituisce il numero totale di sospensioni causate dal debugger, ad esempio le chiamate a DkmThread::Suspend senza una chiamata a DkmThread::Resume. Esclude tutte le sospensioni esterne al debugger.

GetExtendedRegisters()

Ottiene i registri estesi dal contesto del thread.

GetManagedThreadProperties(DkmWorkList, DkmCompletionRoutine<DkmGetManagedThreadPropertiesAsyncResult>)

Ottenere le proprietà di un thread gestito.

Questo metodo aggiungerà un nuovo elemento di lavoro all'elenco di lavoro specificato e restituirà una volta accodato l'elemento di lavoro. L'elaborazione effettiva dell'elemento di lavoro è asincrona. Il chiamante riceverà una notifica che la richiesta viene completata tramite la routine di completamento.

GetManagedThreadProperties(Int32)

Ottenere le proprietà di un thread gestito.

GetMinidumpThreadInfo(DkmMinidumpThreadInfo)

Ottiene le informazioni sullo stato del thread archiviate nel Minidump.

Questa API è stata introdotta in Visual Studio 17 RTM (DkmApiVersion.VS17RTM).

GetStackAddressRange()

Recupera la base del limite/stack dello stack del thread specificato. Si noti che è possibile che questo valore cambi nel tempo, ad esempio, nel caso di fibre.

GetSteppers()

GetSteppers enumera gli elementi DkmStepper di questo oggetto DkmThread.

GetSuspensionCount(Boolean)

Restituisce il numero di sospensioni corrente di questo thread.

GetSuspensionCount(DkmWorkList, Boolean, DkmCompletionRoutine<DkmGetSuspensionCountAsyncResult>)

Restituisce il numero di sospensioni corrente di questo thread.

Questo metodo aggiungerà un nuovo elemento di lavoro all'elenco di lavoro specificato e restituirà una volta accodato l'elemento di lavoro. L'elaborazione effettiva dell'elemento di lavoro è asincrona. Il chiamante riceverà una notifica che la richiesta viene completata tramite la routine di completamento.

GetThreadCurrentWinRtErrorInfo()

GetThreadCurrentWinRtErrorInfo viene usato per ottenere l'indirizzo dell'oggetto IErrorInfo corrente per questo thread.

Questa API è stata introdotta in Visual Studio 12 RTM (DkmApiVersion.VS12RTM).

GetTlsValue(Int32)

Recupera il valore nello slot di archiviazione locale del thread di debug (TLS) per l'indice TLS specificato. Ogni thread di un processo dispone del relativo slot per ciascun indice TLS.

GetTopStackFrame()

Restituisce il frame dello stack di chiamate superiore per un thread. Questo valore viene in genere memorizzato nella cache dopo la procedura dettagliata del primo stack e cancellato in continuazione. Questa operazione è chiamabile solo sopra il provider dello stack nel processo client. Per ottenere il frame superiore nel processo del server, chiamare GetTopStackWalkFrame.

Vincolo location: l'API deve essere chiamata da un componente IDE (livello > componente 100.000).

GetTopStackWalkFrame(DkmRuntimeInstance)

Restituisce il frame dello stack superiore per un thread. Questo frame può provenire da un'istanza di runtime o da uno strumento di rimozione del monitoraggio. Questa operazione può essere chiamata solo dal processo del server. Per ottenere il frame superiore nel processo client, usare GetTopStackFrame.

Vincolo location: l'API deve essere chiamata da un componente Monitor (livello < componente 100.000).

GetVolatileFlags()

Ottenere flag volatili su un thread. Ad esempio, restituisce se un thread è un thread pianificato in modalità utente.

GetVolatileFlags(DkmWorkList, DkmCompletionRoutine<DkmGetVolatileFlagsAsyncResult>)

Ottenere flag volatili su un thread. Ad esempio, restituisce se un thread è un thread pianificato in modalità utente.

Questo metodo aggiungerà un nuovo elemento di lavoro all'elenco di lavoro specificato e restituirà una volta accodato l'elemento di lavoro. L'elaborazione effettiva dell'elemento di lavoro è asincrona. Il chiamante riceverà una notifica che la richiesta viene completata tramite la routine di completamento.

GetVolatileProperties(DkmWorkList, DkmCompletionRoutine<DkmGetVolatilePropertiesAsyncResult>)

Ottiene le proprietà dinamiche di un thread.

Questo metodo aggiungerà un nuovo elemento di lavoro all'elenco di lavoro specificato e restituirà una volta accodato l'elemento di lavoro. L'elaborazione effettiva dell'elemento di lavoro è asincrona. Il chiamante riceverà una notifica che la richiesta viene completata tramite la routine di completamento.

GetVolatileProperties(Int32, UInt64)

Ottiene le proprietà dinamiche di un thread.

IsStoppingEventQueued(Boolean)

Indica se il thread specificato ha un evento di arresto nella coda. Queste informazioni vengono usate dal gestore di esecuzione per decidere se un thread può essere ignorato.

OnBeginFuncEvalExecution(DkmFuncEvalFlags)

OnBeginFuncEvalExecution viene chiamato dal monitoraggio di debug di base nel thread dell'evento. Questo metodo viene chiamato come parte dell'implementazione di IDkmBaseFuncEvalService.BeginFuncEvalExecution, che viene chiamata per riprendere il processo per una valutazione della funzione. OnBeginFuncEvalExecution aggiornerà lo stato interno dell'oggetto DkmProcess per indicare che è in corso una valutazione della funzione. Verrà inoltre inviato un evento FuncEvalStarting che contrassegnerà il processo come in esecuzione, in modo che non siano consentite operazioni che richiedono un processo arrestato.

OnContinueExecution()

OnContinueExecution viene chiamato dal monitoraggio di debug di base nel thread dell'evento. Questo metodo viene chiamato come parte dell'implementazione di IDkmContinueExecution.ContinueExecution, che viene usato dall'IDE per continuare il processo di destinazione. Questo metodo viene utilizzato dal Dispatcher per inviare gli eventi di arresto che non possono essere elaborati in precedenza o per aggiornare lo stato interno dell'oggetto DkmProcess per indicare che il processo di destinazione è ora in esecuzione. Prima di contrassegnare il processo come in esecuzione, dispatcher invierà un evento Continue.

Un monitoraggio di debug di base dovrebbe essere chiamato in modo reentrante mentre si trova in questo metodo.

OnEmbeddedBreakpointHit(DkmInstructionAddress, Boolean)

Generare un evento EmbeddedBreakpointHit. I componenti che implementano l'interfaccia sink di eventi riceveranno la notifica degli eventi. Questo metodo accoderà l'evento e il controllo tornerà immediatamente al chiamante.

OnInterceptExceptionCompleted(UInt64)

Generare un evento InterceptExceptionCompleted. I componenti che implementano l'interfaccia sink di eventi riceveranno la notifica degli eventi. Questo metodo accoderà l'evento e il controllo tornerà immediatamente al chiamante.

OnThreadNameChange()

ThreadNameChange viene inviato dal dispatcher quando DkmThread::NameChange viene richiamato dal monitoraggio.

Questa API è stata introdotta in Visual Studio 14 RTM (DkmApiVersion.VS14RTM).

RaiseExecutionControlException(UInt32)

API che può essere chiamata da un'implementazione IDkmSingleStepCompleteReceived o IDkmRuntimeBreakpointReceived per forzare la dm di base a generare l'eccezione EXCEPTION_BREAKPOINT o EXCEPTION_SINGLE_STEP nel processo di destinazione quando viene ripresa l'esecuzione. In genere, l'eccezione del punto di interruzione o del singolo passaggio viene eliminata in modo implicito. In questo modo il EXCEPTION_BREAKPOINT/EXCEPTION_SINGLE_STEP deve essere gestito dai gestori di eccezioni all'interno del processo di destinazione. Questa API avrà esito negativo se il thread non è attualmente in fase di completamento o di interruzione.

Vincolo location: l'API deve essere chiamata da un componente Monitor (livello < componente 100.000).

RemoveDataItem<T>()

Rimuovere l'istanza di 'T' da questo contenitore. In genere non è necessario chiamare questo metodo come contenitore di dati verrà svuotato automaticamente quando l'oggetto viene chiuso.

(Ereditato da DkmDataContainer)
Resume(Boolean)

Riprendere questo thread.

SetContext(Byte[])

Aggiornare il contesto (valori di registro) di un thread.

SetDataItem<T>(DkmDataCreationDisposition, T)

Inserire un nuovo elemento nel contenitore di dati.

(Ereditato da DkmDataContainer)
SetExtendedRegisterValue(Int32, ReadOnlyCollection<Byte>)

Imposta il valore del registro esteso nel contesto del thread.

SetTlsValue(Int32, UInt64)

Archivia un valore nello slot di archiviazione locale (TLS) del thread del thread di debug per l'indice TLS specificato. Ogni thread di un processo dispone del relativo slot per ciascun indice TLS.

Suspend(Boolean)

Sospendere questo thread.

Unload(Int32)

ThreadExit viene inviato dal dispatcher quando DkmThread::Unload viene richiamato dal monitoraggio.

Questo metodo può essere chiamato solo dal componente che ha creato l'oggetto .

Si applica a