Compartilhar via


DkmThread Classe

Definição

DkmThread representa um thread em execução no processo de destino.

Classes derivadas: 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
Herança
Herança
Derivado
Atributos

Propriedades

Connection

Isso representa uma conexão entre o monitor e o IDE. Ele pode ser uma conexão local se o monitor estiver em execução no mesmo processo que o IDE ou pode ser uma conexão remota. No processo do monitor, há apenas uma conexão.

IsMainThread

True se esse for o thread main desse processo. O thread main é o primeiro thread a ser iniciado.

IsUnloaded

Retornará true se um evento 'descarregado' tiver sido gerado para este objeto (exemplo: DkmThread::Unload for chamado) ou se o objeto tiver sido fechado. Observe que o cuidado deve ser usado ao verificar esse status, pois, sem sincronização, o status retornado pode não ser mais preciso após a leitura.

(Herdado de DkmDataContainer)
NativeStartAddress

Se disponível, esse é o endereço inicial do Win32 desse thread (valor passado para a API CreateThread). O valor nem sempre estará disponível, por exemplo, geralmente não está disponível em cenários em que o thread foi iniciado após o depurador anexado ou em minidespejos.

Process

DkmProcess representa um processo de destino que está sendo depurado. O depurador depura processos, portanto, essa é a unidade básica de depuração. Um DkmProcess pode representar um processo do sistema ou um processo virtual, como minidespejos.

SystemInformation

Contém informações sobre o sistema de computador no qual esse thread está sendo executado. Se esse thread estiver em execução em WOW (emulação de 32 bits em um sistema operacional de 64 bits), essas informações serão para o subsistema de 32 bits em vez do subsistema de 64 bits.

SystemPart

[Opcional] Descreve as características do thread que são relevantes para um thread Completo do Win32. Atualmente, esse valor é necessário e todos os threads terão um bloco 'System'. No futuro, esse valor poderá ser NULL se o DkmThread representar algo diferente de um thread Completo do Win32.

TebAddress

Endereço dentro do processo de destino, em que o bloco de ambiente de thread do Win32 é armazenado. Confira a documentação sobre a estrutura TEB no MSDN para obter mais informações.

UniqueId

Guid que identifica exclusivamente esse objeto de thread.

Métodos

BeginFuncEvalExecution(DkmFuncEvalFlags)

Esse método é usado para retomar o processo de destino para que uma avaliação de função possa ocorrer. Essa função é chamada por um monitor de depuração de runtime depois de configurar uma avaliação de função para que o processo de destino seja executado. O monitor de runtime primeiro atualizará o contexto do thread, atualizará qualquer memória necessária no processo de destino e configurará qualquer detecção de que a avaliação da função seja concluída.

Os chamadores desse método DEVEM sempre chamar EndFuncEvalExecution antes de retornar da operação que disparou a avaliação da função. O comportamento será indefinido se um chamador não fizer isso.

Esse método é implementado no monitor de depuração base atualizando primeiro o processo de destino para estar no modo de avaliação de função (DkmThread.OnBeginFuncEvalExecution), suspendendo e/ou retomando threads conforme especificado pelos sinalizadores de avaliação de função e, finalmente, continuando o processo de destino.

Esse método pode ser chamado de qualquer thread, no entanto, OnBeginFuncEvalExecution deve ser chamado do thread de evento de parada, portanto, o monitor de depuração base pode precisar ser executado como o comutador de thread como parte da implementação desse método. O monitor de depuração base não deve retornar de BeginFuncEvalExecution até que o destino seja retomado.

CanBeginFuncEvalExecution(DkmFuncEvalFlags)

CanBeginFuncEvalExecution pode ser chamado para entender se o estado atual do processo permite avaliações de função. Isso retornará false, por exemplo, se o DM base tiver chamado StoppingEventProcessingBegin, mas não StopEventProcessingContinue.

Restrição de local: a API deve ser chamada de um componente monitor (nível < de componente 100.000).

Essa API foi introduzida no Visual Studio 16 Atualização 5 (DkmApiVersion.VS16Update5).

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

DkmThread é chamado por um monitor de depuração para criar uma nova instância DkmThread. Os objetos DkmThread para threads do sistema são criados pelo monitor de depuração base. Esse método deve ser chamado no thread de evento.

Esse método enviará um evento ThreadCreate.

Restrição de local: a API deve ser chamada de um componente monitor (nível < de componente 100.000).

CreateFrameRegisters(DkmUnwoundRegister[], UInt32)

Converta uma matriz de DkmUnwoundRegisters em uma instância de DkmFrameRegisters que contém um DkmReadOnlyCollection classificado de DkmUnwoundRegisters.

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

Cria um objeto DkmFrameRegisters da matriz de bytes fornecida que contém uma estrutura CONTEXT Win32.

EndFuncEvalExecution(DkmFuncEvalFlags)

EndFuncEvalExecution é chamado pelo monitor de depuração de runtime no thread de eventos para sair do modo de avaliação da função. EndFuncEvalExecution atualizará o estado interno do objeto DkmProcess para indicar que a avaliação da função terminou. Isso também enviará um evento FuncEvalEnded e marcará o processo como interrompido.

Esse método pode ser chamado (1) durante o processamento de uma notificação de evento de parada 'recebida' -ou- (2) durante o processamento de um evento sem interrupção, como saída de thread, -ou- (3) enquanto o destino ainda está parado, por exemplo, se a configuração de avaliação de função falhou.

GetContext(Int32, Byte[])

Obtenha o contexto atual (valores de registro) de um thread.

GetContext(Int32, Void*, Int32)

Obtenha o contexto atual (valores de registro) de um thread.

GetCurrentFrameInfo(UInt64, UInt64, UInt64)

GetCurrentFrameInfo é usado para obter a base do quadro e o endereço de retorno para o contexto atual do thread. Isso leva em conta a Omissão do Ponteiro de Quadro e se o ponteiro de instrução atual estiver em um prólogo, epílogo etc... OBSERVAÇÃO: em alguns casos, isso vai errar se o quadro tiver Omissão de Ponteiro de Quadro e não houver símbolos carregados.

Restrição de local: a API deve ser chamada de um componente monitor (nível < de componente 100.000).

GetCurrentFuncEvalMode()

GetCurrentFuncEvalMode pode ser chamado por componentes como parte do processamento de eventos para determinar se a avaliação da função está habilitada. Essa função só pode ser chamada como parte do processamento de eventos.

GetCurrentLocation(DkmWorkList, DkmCompletionRoutine<DkmGetCurrentLocationAsyncResult>)

Fornece o local de um thread, como visível na janela threads, ou threads suspensos na barra de ferramentas de local de depuração.

Esse método acrescentará um novo item de trabalho à lista de trabalho especificada e retornará depois que o item de trabalho for acrescentado. O processamento real do item de trabalho é assíncrono. O chamador será notificado de que a solicitação foi concluída por meio da rotina de conclusão.

Restrição de local: a API deve ser chamada de um componente IDE (nível > de componente 100.000).

GetCurrentRegisters(DkmUnwoundRegister[])

Retorna um objeto DkmFrameRegisters que contém os valores de registro atuais do thread.

GetDataItem<T>()

Obtém a instância de 'T' que foi adicionada a essa instância de contêiner. Se esse contêiner não contiver um 'T', essa função retornará nulo.

(Herdado de DkmDataContainer)
GetDebuggerSuspensionCount()

Retornar o número total de suspensões causadas pelo depurador (ou seja, chamadas para DkmThread::Suspend sem uma chamada para DkmThread::Resume). Isso exclui todas as suspensões externas ao depurador.

GetExtendedRegisters()

Obtém os registros estendidos do contexto de thread.

GetManagedThreadProperties(DkmWorkList, DkmCompletionRoutine<DkmGetManagedThreadPropertiesAsyncResult>)

Obter as propriedades de um thread gerenciado.

Esse método acrescentará um novo item de trabalho à lista de trabalho especificada e retornará depois que o item de trabalho for acrescentado. O processamento real do item de trabalho é assíncrono. O chamador será notificado de que a solicitação foi concluída por meio da rotina de conclusão.

GetManagedThreadProperties(Int32)

Obter as propriedades de um thread gerenciado.

GetMinidumpThreadInfo(DkmMinidumpThreadInfo)

Obtém informações de estado do thread armazenadas no Minidump.

Essa API foi introduzida no Visual Studio 17 RTM (DkmApiVersion.VS17RTM).

GetStackAddressRange()

Recupera o limite de pilha/base de pilha do thread fornecido. Observe que é possível que esse valor seja alterado ao longo do tempo, por exemplo, no caso de fibras.

GetSteppers()

GetSteppers enumera os elementos DkmStepper deste objeto DkmThread.

GetSuspensionCount(Boolean)

Retornar a contagem de suspensão atual desse thread.

GetSuspensionCount(DkmWorkList, Boolean, DkmCompletionRoutine<DkmGetSuspensionCountAsyncResult>)

Retornar a contagem de suspensão atual desse thread.

Esse método acrescentará um novo item de trabalho à lista de trabalho especificada e retornará depois que o item de trabalho for acrescentado. O processamento real do item de trabalho é assíncrono. O chamador será notificado de que a solicitação foi concluída por meio da rotina de conclusão.

GetThreadCurrentWinRtErrorInfo()

GetThreadCurrentWinRtErrorInfo é usado para obter o endereço do objeto IErrorInfo atual para esse thread.

Essa API foi introduzida no Visual Studio 12 RTM (DkmApiVersion.VS12RTM).

GetTlsValue(Int32)

Recupera o valor no slot TLS (armazenamento local de thread) do thread de depuração para o índice TLS especificado. Cada thread de um processo tem seu próprio slot para cada índice TLS.

GetTopStackFrame()

Retorna o quadro de pilha de chamadas superior para um thread. Esse valor normalmente é armazenado em cache após a primeira caminhada da pilha e limpo em continuar. Isso só pode ser chamado acima do provedor de pilha no processo do cliente. Para obter o quadro superior no processo do servidor, chame GetTopStackWalkFrame.

Restrição de local: a API deve ser chamada de um componente IDE (nível > de componente 100.000).

GetTopStackWalkFrame(DkmRuntimeInstance)

Retornar o quadro de pilha superior para um thread. Esse quadro pode vir de uma instância de runtime ou de um desenrolador de monitor. Isso só pode ser chamado do processo do servidor. Para obter o quadro superior no processo do cliente, use GetTopStackFrame.

Restrição de local: a API deve ser chamada de um componente monitor (nível < de componente 100.000).

GetVolatileFlags()

Obter sinalizadores voláteis sobre um thread. Por exemplo, retorne se um thread for um thread agendado no modo de usuário.

GetVolatileFlags(DkmWorkList, DkmCompletionRoutine<DkmGetVolatileFlagsAsyncResult>)

Obter sinalizadores voláteis sobre um thread. Por exemplo, retorne se um thread for um thread agendado no modo de usuário.

Esse método acrescentará um novo item de trabalho à lista de trabalho especificada e retornará depois que o item de trabalho for acrescentado. O processamento real do item de trabalho é assíncrono. O chamador será notificado de que a solicitação foi concluída por meio da rotina de conclusão.

GetVolatileProperties(DkmWorkList, DkmCompletionRoutine<DkmGetVolatilePropertiesAsyncResult>)

Obter as propriedades dinâmicas de um thread.

Esse método acrescentará um novo item de trabalho à lista de trabalho especificada e retornará depois que o item de trabalho for acrescentado. O processamento real do item de trabalho é assíncrono. O chamador será notificado de que a solicitação foi concluída por meio da rotina de conclusão.

GetVolatileProperties(Int32, UInt64)

Obter as propriedades dinâmicas de um thread.

IsStoppingEventQueued(Boolean)

Indica se o thread fornecido tem um evento de parada na fila. Essas informações são usadas pelo gerenciador de execução para decidir se um thread pode ser escorregado.

OnBeginFuncEvalExecution(DkmFuncEvalFlags)

OnBeginFuncEvalExecution é chamado pelo monitor de depuração base no thread de evento. Esse método é chamado como parte da implementação de IDkmBaseFuncEvalService.BeginFuncEvalExecution, que é chamado para retomar o processo para uma avaliação de função. OnBeginFuncEvalExecution atualizará o estado interno do objeto DkmProcess para indicar que uma avaliação de função está em andamento. Isso também enviará um evento FuncEvalStarting e marcará o processo como em execução, para que nenhuma operação que exija um processo interrompido seja permitida.

OnContinueExecution()

OnContinueExecution é chamado pelo monitor de depuração base no thread de evento. Esse método é chamado como parte da implementação de IDkmContinueExecution.ContinueExecution, que é o que é usado pelo IDE para continuar o processo de destino. Esse método é usado pelo Dispatcher para expedir eventos de parada que não puderam ser processados anteriormente ou para atualizar o estado interno do objeto DkmProcess para indicar que o processo de destino agora está em execução. Antes de marcar o processo como em execução, o Dispatcher enviará um evento Continue.

Um monitor de depuração base deve esperar ser chamado novamente enquanto estiver nesse método.

OnEmbeddedBreakpointHit(DkmInstructionAddress, Boolean)

Acione um evento EmbeddedBreakpointHit. Os componentes que implementam a interface do coletor de eventos receberão a notificação de evento. Esse método enfileirará o evento e o controle retornará imediatamente ao chamador.

OnInterceptExceptionCompleted(UInt64)

Gerar um evento InterceptExceptionCompleted. Os componentes que implementam a interface do coletor de eventos receberão a notificação de evento. Esse método enfileirará o evento e o controle retornará imediatamente ao chamador.

OnThreadNameChange()

ThreadNameChange é enviado pelo dispatcher quando DkmThread::NameChange é invocado pelo monitor.

Essa API foi introduzida no Visual Studio 14 RTM (DkmApiVersion.VS14RTM).

RaiseExecutionControlException(UInt32)

API que pode ser chamada de uma implementação IDkmSingleStepCompleteReceived ou IDkmRuntimeBreakpointReceived para forçar o DM base a disparar a exceção EXCEPTION_BREAKPOINT ou EXCEPTION_SINGLE_STEP no processo de destino quando a execução é retomada. Normalmente, o ponto de interrupção ou a exceção de etapa única é suprimido implicitamente. Isso permite que o EXCEPTION_BREAKPOINT/EXCEPTION_SINGLE_STEP seja tratado por manipuladores de exceção dentro do processo de destino. Essa API falhará se o thread não estiver em um evento de etapa concluída ou de ponto de interrupção.

Restrição de local: a API deve ser chamada de um componente monitor (nível < de componente 100.000).

RemoveDataItem<T>()

Remova a instância de 'T' desse contêiner. Geralmente, é desnecessário chamar esse método, pois um contêiner de dados será esvaziado automaticamente quando o objeto for fechado.

(Herdado de DkmDataContainer)
Resume(Boolean)

Retome este thread.

SetContext(Byte[])

Atualize o contexto (valores de registro) de um thread.

SetDataItem<T>(DkmDataCreationDisposition, T)

Coloque um novo item no contêiner de dados.

(Herdado de DkmDataContainer)
SetExtendedRegisterValue(Int32, ReadOnlyCollection<Byte>)

Define o valor do registro estendido no contexto do thread.

SetTlsValue(Int32, UInt64)

Armazena um valor no slot TLS (armazenamento local de thread) do thread de depuração para o índice TLS especificado. Cada thread de um processo tem seu próprio slot para cada índice TLS.

Suspend(Boolean)

Suspender este thread.

Unload(Int32)

ThreadExit é enviado pelo dispatcher quando DkmThread::Unload é invocado pelo monitor.

Esse método só pode ser chamado pelo componente que criou o objeto .

Aplica-se a