DkmThread Klasa

Definicja

DkmThread reprezentuje wątek uruchomiony w procesie docelowym.

Klasy pochodne: 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
Dziedziczenie
Dziedziczenie
Pochodne
Atrybuty

Właściwości

Connection

Reprezentuje to połączenie między monitorem a środowiskiem IDE. Może to być połączenie lokalne, jeśli monitor jest uruchomiony w tym samym procesie co środowisko IDE lub może być połączeniem zdalnym. W procesie monitorowania istnieje tylko jedno połączenie.

IsMainThread

Prawda, jeśli jest to główny wątek tego procesu. Główny wątek to pierwszy wątek do uruchomienia.

IsUnloaded

Zwraca wartość true, jeśli dla tego obiektu zostało podniesione zdarzenie "unloaded" (na przykład: DkmThread::Unload jest wywoływane) lub jeśli obiekt został zamknięty. Należy pamiętać, że podczas sprawdzania tego stanu należy zachować ostrożność, ponieważ bez synchronizacji zwrócony stan może nie być już dokładny po odczytaniu instrukcji.

(Odziedziczone po DkmDataContainer)
NativeStartAddress

Jeśli jest dostępna, jest to adres początkowy win32 tego wątku (wartość przekazana do interfejsu API CreateThread). Wartość nie zawsze będzie dostępna, na przykład jest ogólnie niedostępna w scenariuszach, w których wątek został uruchomiony po dołączeniu debugera lub w minidumps.

Process

DkmProcess reprezentuje proces docelowy, który jest debugowany. Debuger debuguje procesy, więc jest to podstawowa jednostka debugowania. Proces DkmProcess może reprezentować proces systemowy lub proces wirtualny, taki jak minidumps.

SystemInformation

Zawiera informacje o systemie komputerowym, w którym działa ten wątek. Jeśli ten wątek działa w obszarze WOW (emulacja 32-bitowa w 64-bitowym systemie operacyjnym), te informacje będą przeznaczone dla podsystemu 32-bitowego, a nie podsystemu 64-bitowego.

SystemPart

[Opcjonalnie] Opisuje cechy wątku, które są istotne dla pełnego wątku Win32. Obecnie ta wartość jest wymagana, a wszystkie wątki będą miały blok "System". W przyszłości ta wartość może mieć wartość NULL, jeśli element DkmThread reprezentuje coś innego niż pełny wątek Win32.

TebAddress

Adres w procesie docelowym, w którym jest przechowywany blok środowiska wątku Win32. Aby uzyskać więcej informacji, zobacz dokumentację dotyczącą struktury TEB w witrynie MSDN.

UniqueId

Identyfikator GUID, który jednoznacznie identyfikuje ten obiekt wątku.

Metody

BeginFuncEvalExecution(DkmFuncEvalFlags)

Ta metoda służy do wznawiania procesu docelowego, aby ocena funkcji mogła wystąpić. Ta funkcja jest wywoływana przez monitor debugowania środowiska uruchomieniowego po skonfigurowaniu oceny funkcji w celu uruchomienia procesu docelowego. Monitor środowiska uruchomieniowego najpierw zaktualizuje kontekst wątku, zaktualizuje wszelką niezbędną pamięć w procesie docelowym i skonfiguruje wszelkie wykrycia, że ocena funkcji została ukończona.

Wywołania tej metody MUSZĄ zawsze wywoływać metodę EndFuncEvalExecution przed powrotem z operacji, która wyzwoliła ocenę funkcji. Zachowanie jest niezdefiniowane, jeśli obiekt wywołujący nie może tego zrobić.

Ta metoda jest implementowana w podstawowym monitorze debugowania, najpierw aktualizując proces docelowy w trybie oceny funkcji (DkmThread.OnBeginFuncEvalExecution), a następnie zawieszając i/lub wznawiając wątki określone przez flagi oceny funkcji, a na koniec kontynuując proces docelowy.

Ta metoda może być wywoływana z dowolnego wątku, jednak funkcja OnBeginFuncEvalExecution musi zostać wywołana z zatrzymanego wątku zdarzeń, więc podstawowy monitor debugowania może wymagać wykonania jako przełącznik wątku w ramach implementacji tej metody. Podstawowy monitor debugowania nie powinien zwracać wartości BeginFuncEvalExecution do momentu wznowienia elementu docelowego.

CanBeginFuncEvalExecution(DkmFuncEvalFlags)

Można wywołać funkcję CanBeginFuncEvalExecution, aby zrozumieć, czy bieżący stan procesu umożliwia ocenę funkcji. Spowoduje to zwrócenie wartości false, na przykład jeśli podstawowa dm ma nazwę StoppingEventProcessingBegin, ale nie StoppingEventProcessingContinue.

Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika Monitor (poziom < składnika 100 000).

Ten interfejs API został wprowadzony w programie Visual Studio 16 Update 5 (DkmApiVersion.VS16Update5).

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

Element DkmThread jest wywoływany przez monitor debugowania w celu utworzenia nowego wystąpienia DkmThread. Obiekty DkmThread dla wątków systemowych są tworzone przez podstawowy monitor debugowania. Ta metoda musi być wywoływana w wątku zdarzeń.

Ta metoda spowoduje wysłanie zdarzenia ThreadCreate.

Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika Monitor (poziom < składnika 100 000).

CreateFrameRegisters(DkmUnwoundRegister[], UInt32)

Przekonwertuj tablicę DkmUnwoundRegisters na wystąpienie elementu DkmFrameRegisters zawierającego posortowaną wartość DkmReadOnlyCollection z kolekcji DkmUnwoundRegisters.

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

Tworzy obiekt DkmFrameRegisters z dostarczonej tablicy bajtów zawierającej strukturę KONTEKSTU Win32.

EndFuncEvalExecution(DkmFuncEvalFlags)

Funkcja EndFuncEvalExecution jest wywoływana przez monitor debugowania środowiska uruchomieniowego w wątku zdarzeń w celu zakończenia trybu oceny funkcji. EndFuncEvalExecution zaktualizuje stan wewnętrzny obiektu DkmProcess, aby wskazać, że ocena funkcji została zakończona. Spowoduje to również wysłanie zdarzenia FuncEvalEnded i oznaczy proces jako zatrzymany.

Ta metoda może być wywoływana (1) podczas przetwarzania "odebranego" powiadomienia o zatrzymaniu zdarzenia -lub- (2) podczas przetwarzania zdarzenia bez zatrzymywania, takiego jak zakończenie wątku, -lub- (3), gdy element docelowy jest nadal zatrzymany, na przykład jeśli konfiguracja oceny funkcji nie powiodła się.

GetContext(Int32, Byte[])

Uzyskaj bieżący kontekst (zarejestruj wartości) wątku.

GetContext(Int32, Void*, Int32)

Uzyskaj bieżący kontekst (zarejestruj wartości) wątku.

GetCurrentFrameInfo(UInt64, UInt64, UInt64)

Polecenie GetCurrentFrameInfo służy do uzyskiwania podstawy ramki i zwracanego adresu dla bieżącego kontekstu wątku. Uwzględnia to pominięcie wskaźnika ramki, a jeśli bieżący wskaźnik instrukcji znajduje się w prologu, epilogu itp. UWAGA: W niektórych przypadkach wystąpi błąd, jeśli ramka ma pominięcie wskaźnika ramki i nie ma załadowanych symboli.

Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika Monitor (poziom < składnika 100 000).

GetCurrentFuncEvalMode()

Polecenie GetCurrentFuncEvalMode może być wywoływane przez składniki w ramach przetwarzania zdarzeń w celu określenia, czy jest włączona ocena funkcji. Ta funkcja może być wywoływana tylko w ramach przetwarzania zdarzeń.

GetCurrentLocation(DkmWorkList, DkmCompletionRoutine<DkmGetCurrentLocationAsyncResult>)

Udostępnia lokalizację wątku, jak widać w oknie wątków lub listę rozwijaną wątków na pasku narzędzi lokalizacji debugowania.

Ta metoda dołączy nowy element roboczy do określonej listy roboczej i powróci po dołączeniu elementu roboczego. Rzeczywiste przetwarzanie elementu roboczego jest asynchroniczne. Obiekt wywołujący zostanie powiadomiony, że żądanie zostało ukończone przez procedurę uzupełniania.

Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika IDE (poziom > składnika 100 000).

GetCurrentRegisters(DkmUnwoundRegister[])

Zwraca obiekt DkmFrameRegisters zawierający bieżące wartości rejestru wątku.

GetDataItem<T>()

Pobiera wystąpienie elementu "T", które zostało dodane do tego wystąpienia kontenera. Jeśli ten kontener nie zawiera wartości "T", ta funkcja zwróci wartość null.

(Odziedziczone po DkmDataContainer)
GetDebuggerSuspensionCount()

Zwróć całkowitą liczbę zawieszenia spowodowanych przez debuger (tj. wywołania do DkmThread::Suspend bez wywołania elementu DkmThread::Resume). Wyklucza to wszelkie zawieszenia poza debugerem.

GetExtendedRegisters()

Pobiera rozszerzone rejestry z kontekstu wątku.

GetManagedThreadProperties(DkmWorkList, DkmCompletionRoutine<DkmGetManagedThreadPropertiesAsyncResult>)

Pobieranie właściwości zarządzanego wątku.

Ta metoda dołączy nowy element roboczy do określonej listy roboczej i powróci po dołączeniu elementu roboczego. Rzeczywiste przetwarzanie elementu roboczego jest asynchroniczne. Obiekt wywołujący zostanie powiadomiony, że żądanie zostało ukończone przez procedurę uzupełniania.

GetManagedThreadProperties(Int32)

Pobieranie właściwości zarządzanego wątku.

GetMinidumpThreadInfo(DkmMinidumpThreadInfo)

Uzyskuje informacje o stanie wątku przechowywane w minidump.

Ten interfejs API został wprowadzony w programie Visual Studio 17 RTM (DkmApiVersion.VS17RTM).

GetStackAddressRange()

Pobiera bazę limitu stosu/stosu danego wątku. Należy pamiętać, że jej możliwe jest, aby ta wartość zmieniała się w czasie, na przykład w przypadku włókien.

GetSteppers()

GetSteppers wylicza elementy DkmStepper tego obiektu DkmThread.

GetSuspensionCount(Boolean)

Zwróć bieżącą liczbę zawieszenia tego wątku.

GetSuspensionCount(DkmWorkList, Boolean, DkmCompletionRoutine<DkmGetSuspensionCountAsyncResult>)

Zwróć bieżącą liczbę zawieszenia tego wątku.

Ta metoda dołączy nowy element roboczy do określonej listy roboczej i powróci po dołączeniu elementu roboczego. Rzeczywiste przetwarzanie elementu roboczego jest asynchroniczne. Obiekt wywołujący zostanie powiadomiony, że żądanie zostało ukończone przez procedurę uzupełniania.

GetThreadCurrentWinRtErrorInfo()

GetThreadCurrentWinRtErrorInfo służy do uzyskiwania adresu bieżącego obiektu IErrorInfo dla tego wątku.

Ten interfejs API został wprowadzony w programie Visual Studio 12 RTM (DkmApiVersion.VS12RTM).

GetTlsValue(Int32)

Pobiera wartość w miejscu magazynu lokalnego wątku debuggee (TLS) dla określonego indeksu TLS. Każdy wątek procesu ma własne miejsce dla każdego indeksu PROTOKOŁU TLS.

GetTopStackFrame()

Zwraca górną ramkę stosu wywołań dla wątku. Ta wartość jest zwykle buforowana po pierwszym przejściu stosu i wyczyszczone po kontynuowaniu. Jest to możliwe tylko wywołanie powyżej dostawcy stosu w procesie klienta. Aby uzyskać górną ramkę w procesie serwera, wywołaj metodę GetTopStackWalkFrame.

Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika IDE (poziom > składnika 100 000).

GetTopStackWalkFrame(DkmRuntimeInstance)

Zwróć górną ramkę stosu dla wątku. Ta ramka może pochodzić z wystąpienia środowiska uruchomieniowego lub odwijacza monitora. Można to wywołać tylko z procesu serwera. Aby uzyskać górną ramkę w procesie klienta, użyj polecenia GetTopStackFrame.

Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika Monitor (poziom < składnika 100 000).

GetVolatileFlags()

Pobieranie nietrwałych flag dotyczących wątku. Na przykład zwracaj, jeśli wątek jest wątkiem zaplanowanym w trybie użytkownika.

GetVolatileFlags(DkmWorkList, DkmCompletionRoutine<DkmGetVolatileFlagsAsyncResult>)

Pobieranie nietrwałych flag dotyczących wątku. Na przykład należy zwrócić, jeśli wątek jest wątkiem zaplanowanym przez użytkownika.

Ta metoda dołączy nowy element roboczy do określonej listy roboczej i powróci po dołączeniu elementu roboczego. Rzeczywiste przetwarzanie elementu roboczego jest asynchroniczne. Obiekt wywołujący zostanie powiadomiony, że żądanie zostało ukończone przez procedurę ukończenia.

GetVolatileProperties(DkmWorkList, DkmCompletionRoutine<DkmGetVolatilePropertiesAsyncResult>)

Pobieranie właściwości dynamicznych wątku.

Ta metoda dołączy nowy element roboczy do określonej listy roboczej i powróci po dołączeniu elementu roboczego. Rzeczywiste przetwarzanie elementu roboczego jest asynchroniczne. Obiekt wywołujący zostanie powiadomiony, że żądanie zostało ukończone przez procedurę ukończenia.

GetVolatileProperties(Int32, UInt64)

Pobieranie właściwości dynamicznych wątku.

IsStoppingEventQueued(Boolean)

Wskazuje, czy dany wątek ma zdarzenie zatrzymania w kolejce. Te informacje są używane przez menedżera wykonywania, aby zdecydować, czy wątek może zostać poślizgnięty.

OnBeginFuncEvalExecution(DkmFuncEvalFlags)

Funkcja OnBeginFuncEvalExecution jest wywoływana przez podstawowy monitor debugowania w wątku zdarzenia. Ta metoda jest wywoływana w ramach implementacji IDkmBaseFuncEvalService.BeginFuncEvalExecution, która jest wywoływana w celu wznowienia procesu oceny funkcji. OnBeginFuncEvalExecution zaktualizuje stan wewnętrzny obiektu DkmProcess, aby wskazać, że ocena funkcji jest w toku. Spowoduje to również wysłanie zdarzenia FuncEvalStarting i oznaczy proces jako uruchomiony, dzięki czemu żadne operacje, które wymagają zatrzymanego procesu, będą dozwolone.

OnContinueExecution()

OnContinueExecution jest wywoływany przez podstawowy monitor debugowania w wątku zdarzenia. Ta metoda jest wywoływana jako część implementacji IDkmContinueExecution.ContinueExecution, która jest używana przez środowisko IDE do kontynuowania procesu docelowego. Ta metoda jest używana przez dyspozytor do wysyłania zdarzeń zatrzymania, które nie mogły zostać przetworzone wcześniej, lub zaktualizowania wewnętrznego stanu obiektu DkmProcess w celu wskazania, że proces docelowy jest uruchomiony. Przed oznaczeniem procesu jako uruchomionego dyspozytor wyśle zdarzenie Kontynuuj.

Podstawowy monitor debugowania powinien oczekiwać ponownego wywołania, gdy jest on w tej metodzie.

OnEmbeddedBreakpointHit(DkmInstructionAddress, Boolean)

Zgłoś zdarzenie EmbeddedBreakpointHit. Składniki, które implementują interfejs ujścia zdarzeń, otrzymają powiadomienie o zdarzeniu. Ta metoda spowoduje w kolejce zdarzenie, a kontrolka natychmiast powróci do elementu wywołującego.

OnInterceptExceptionCompleted(UInt64)

Zgłoś zdarzenie InterceptExceptionCompleted. Składniki, które implementują interfejs ujścia zdarzeń, otrzymają powiadomienie o zdarzeniu. Ta metoda spowoduje w kolejce zdarzenie, a kontrolka natychmiast powróci do elementu wywołującego.

OnThreadNameChange()

ThreadNameChange jest wysyłany przez dyspozytora, gdy DkmThread::NameChange jest wywoływany przez monitor.

Ten interfejs API został wprowadzony w programie Visual Studio 14 RTM (DkmApiVersion.VS14RTM).

RaiseExecutionControlException(UInt32)

Interfejs API, który może być wywoływany z elementu IDkmSingleStepCompleteReceived lub IDkmRuntimeBreakpointReceived implementacji, aby wymusić uruchomienie podstawowego dm w celu uruchomienia EXCEPTION_BREAKPOINT lub EXCEPTION_SINGLE_STEP wyjątku w procesie docelowym po wznowieniu wykonywania. Zwykle wyjątek punktu przerwania lub pojedynczego kroku jest niejawnie pomijany. Umożliwia to obsługę EXCEPTION_BREAKPOINT/EXCEPTION_SINGLE_STEP przez programy obsługi wyjątków w procesie docelowym. Ten interfejs API zakończy się niepowodzeniem, jeśli wątek nie znajduje się obecnie w kroku ukończenia lub zdarzenia punktu przerwania.

Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika Monitor (poziom < składnika 100 000).

RemoveDataItem<T>()

Usuń wystąpienie elementu "T" z tego kontenera. Zwykle wywołanie tej metody jest niepotrzebne, ponieważ kontener danych zostanie automatycznie opróżniony po zamknięciu obiektu.

(Odziedziczone po DkmDataContainer)
Resume(Boolean)

Wznów ten wątek.

SetContext(Byte[])

Zaktualizuj kontekst (zarejestruj wartości) wątku.

SetDataItem<T>(DkmDataCreationDisposition, T)

Umieść nowy element w kontenerze danych.

(Odziedziczone po DkmDataContainer)
SetExtendedRegisterValue(Int32, ReadOnlyCollection<Byte>)

Ustawia wartość rozszerzonego rejestru w kontekście wątku.

SetTlsValue(Int32, UInt64)

Przechowuje wartość w miejscu magazynu lokalnego wątku debuggee (TLS) dla określonego indeksu TLS. Każdy wątek procesu ma własne miejsce dla każdego indeksu TLS.

Suspend(Boolean)

Wstrzymaj ten wątek.

Unload(Int32)

Element ThreadExit jest wysyłany przez dyspozytora, gdy element DkmThread::Unload jest wywoływany przez monitor.

Ta metoda może być wywoływana tylko przez składnik, który utworzył obiekt.

Dotyczy