Поделиться через


DkmVirtualThread Класс

Определение

DkmVirtualThread представляет поток, который физически не существует в отлаживаемом процессе.

Этот API появился в Visual Studio 16 с обновлением 2 (DkmApiVersion.VS16Update2).

public ref class DkmVirtualThread : Microsoft::VisualStudio::Debugger::DkmThread
[System.Runtime.InteropServices.Guid("bec7987a-48f1-dd04-3001-8c296365a14f")]
public class DkmVirtualThread : Microsoft.VisualStudio.Debugger.DkmThread
[<System.Runtime.InteropServices.Guid("bec7987a-48f1-dd04-3001-8c296365a14f")>]
type DkmVirtualThread = class
    inherit DkmThread
Public Class DkmVirtualThread
Inherits DkmThread
Наследование
Наследование
DkmVirtualThread
Атрибуты

Свойства

Connection

Это представляет собой соединение между монитором и интегрированной среды разработки. Это может быть локальное подключение, если монитор выполняется в том же процессе, что и интегрированная среда разработки, или удаленное подключение. В процессе мониторинга имеется только одно подключение.

(Унаследовано от DkmThread)
IsMainThread

Значение true, если это main поток этого процесса. Поток main является первым потоком, который запускается.

(Унаследовано от DkmThread)
IsUnloaded

Возвращает значение true, если для этого объекта было вызвано событие "unloaded" (например, вызывается DkmThread::Unload) или если объект был закрыт. Обратите внимание, что при проверке этого состояния необходимо соблюдать осторожность, так как без синхронизации возвращаемое состояние может быть не точным после прочтения инструкции.

(Унаследовано от DkmDataContainer)
NativeStartAddress

Если он доступен, это начальный адрес Win32 этого потока (значение, переданное API CreateThread). Значение не всегда будет доступно, например, оно обычно недоступно в сценариях, где поток был запущен после присоединения отладчика или в минидампах.

(Унаследовано от DkmThread)
Process

DkmProcess представляет отлаживаемый целевой процесс. Отладчик отлаживать процессы, поэтому это базовая единица отладки. DkmProcess может представлять системный или виртуальный процесс, например минидампы.

(Унаследовано от DkmThread)
SystemInformation

Содержит сведения о системе компьютера, в котором выполняется этот поток. Если этот поток выполняется в WOW (32-разрядная эмуляция в 64-разрядной ОС), эти сведения будут использоваться для 32-разрядной подсистемы, а не для 64-разрядной подсистемы.

(Унаследовано от DkmThread)
SystemPart

[Необязательно] Описывает признаки потока, относящиеся к полному потоку Win32. В настоящее время это значение является обязательным, и все потоки будут иметь блок System. В будущем это значение может иметь значение NULL, если DkmThread представляет не полный поток Win32.

(Унаследовано от DkmThread)
TebAddress

Адрес в целевом процессе, где хранится блок среды потока Win32. Дополнительные сведения см. в документации по структуре TEB на сайте MSDN.

(Унаследовано от DkmThread)
UniqueId

Guid, который однозначно идентифицирует этот объект потока.

(Унаследовано от DkmThread)

Методы

BeginFuncEvalExecution(DkmFuncEvalFlags)

Этот метод используется для возобновления целевого процесса, чтобы можно было выполнить оценку функции. Эта функция вызывается монитором отладки среды выполнения после настройки оценки функции для выполнения целевого процесса. Монитор среды выполнения сначала обновит контекст потока, обновит необходимую память в целевом процессе и установит любое обнаружение завершения оценки функции.

Вызывающие методы должны всегда вызывать EndFuncEvalExecution перед возвратом из операции, которая активировала вычисление функции. Поведение не определено, если вызывающий объект не может сделать это.

Этот метод реализуется в базовом мониторе отладки путем обновления целевого процесса до режима оценки функции (DkmThread.OnBeginFuncEvalExecution), затем приостановки и (или) возобновления потоков в соответствии с флагами оценки функции и, наконец, продолжения целевого процесса.

Этот метод можно вызвать из любого потока, однако OnBeginFuncEvalExecution должен вызываться из потока событий остановки, поэтому базовому монитору отладки может потребоваться выполнение функции переключения потоков в рамках реализации этого метода. Базовый монитор отладки не должен возвращаться из BeginFuncEvalExecution до тех пор, пока целевой объект не будет возобновлен.

(Унаследовано от DkmThread)
CanBeginFuncEvalExecution(DkmFuncEvalFlags)

CanBeginFuncEvalExecution можно вызвать, чтобы понять, допускает ли текущее состояние процесса вычисления функций. Например, возвращается значение false, если базовый DM вызывает Метод StoppingEventProcessingBegin, но не StoppingEventProcessingContinue.

Ограничение расположения. API должен вызываться из компонента Monitor (уровень < компонента 100 000).

Этот API появился в Visual Studio 16 с обновлением 5 (DkmApiVersion.VS16Update5).

(Унаследовано от DkmThread)
Create(DkmProcess, DkmThread+System, DkmDataItem)

Create новый экземпляр объекта DkmVirtualThread.

Ограничение расположения: API должен вызываться из компонента Monitor (уровень < компонента 100 000).

Этот API появился в Visual Studio 16 с обновлением 2 (DkmApiVersion.VS16Update2).

CreateFrameRegisters(DkmUnwoundRegister[], UInt32)

Преобразуйте массив DkmUnwoundRegisters в экземпляр DkmFrameRegisters, содержащий отсортированный DkmReadOnlyCollection DkmUnwoundRegisters.

(Унаследовано от DkmThread)
CreateRegistersObject(Byte[], DkmUnwoundRegister[], DkmUnwoundRegister[])

Создает объект DkmFrameRegisters из предоставленного массива байтов, содержащего структуру Win32 CONTEXT.

(Унаследовано от DkmThread)
EndFuncEvalExecution(DkmFuncEvalFlags)

EndFuncEvalExecution вызывается монитором отладки среды выполнения в потоке событий для выхода из режима оценки функции. EndFuncEvalExecution обновит внутреннее состояние объекта DkmProcess, чтобы указать, что вычисление функции завершено. При этом также будет отправлено событие FuncEvalEnded, которое помечает процесс как остановленный.

Этот метод может вызываться (1) при обработке уведомления о остановке "получено" - или - (2) при обработке неостанавливающегося события, такого как выход потока, -или- (3), пока целевой объект по-прежнему остановлен, например, если не удалось выполнить настройку оценки функции.

(Унаследовано от DkmThread)
GetContext(Int32, Byte[])

Получение текущего контекста (значений регистра) потока.

(Унаследовано от DkmThread)
GetContext(Int32, Void*, Int32)

Получение текущего контекста (значений регистра) потока.

(Унаследовано от DkmThread)
GetCurrentFrameInfo(UInt64, UInt64, UInt64)

GetCurrentFrameInfo используется для получения базы кадра и возвращаемого адреса для текущего контекста потока. При этом учитывается пропуск указателя кадра и если текущий указатель инструкции находится в прологе, эпилоге и т. д. ПРИМЕЧАНИЕ. В некоторых случаях это будет неправильно, если в кадре есть пропуск указателя кадра и нет загруженных символов.

Ограничение расположения. API должен вызываться из компонента Monitor (уровень < компонента 100 000).

(Унаследовано от DkmThread)
GetCurrentFuncEvalMode()

Метод GetCurrentFuncEvalMode может вызываться компонентами в рамках обработки событий, чтобы определить, включена ли функция вычисления. Эта функция может вызываться только в рамках обработки событий.

(Унаследовано от DkmThread)
GetCurrentLocation(DkmWorkList, DkmCompletionRoutine<DkmGetCurrentLocationAsyncResult>)

Предоставляет расположение потока, отображаемого в окне "Потоки" или раскрывающегося списка потоков на панели инструментов "Расположение отладки".

Этот метод добавляет новый рабочий элемент в указанный список работ и возвращается после добавления рабочего элемента. Фактическая обработка рабочего элемента является асинхронной. Вызывающий объект получит уведомление о том, что запрос завершен с помощью процедуры завершения.

Ограничение расположения: API должен вызываться из компонента интегрированной среды разработки (уровень > компонента 100 000).

(Унаследовано от DkmThread)
GetCurrentRegisters(DkmUnwoundRegister[])

Возвращает объект DkmFrameRegisters, содержащий текущие значения регистра потока.

(Унаследовано от DkmThread)
GetDataItem<T>()

Возвращает экземпляр T, который был добавлен в этот экземпляр контейнера. Если этот контейнер не содержит "T", эта функция возвращает значение NULL.

(Унаследовано от DkmDataContainer)
GetDebuggerSuspensionCount()

Возвращает общее количество приостановок, вызванных отладчиком (т. е. вызовов DkmThread::Suspend без вызова DkmThread::Resume). При этом исключаются все приостановки, внешние для отладчика.

(Унаследовано от DkmThread)
GetExtendedRegisters()

Возвращает расширенные регистры из контекста потока.

(Унаследовано от DkmThread)
GetManagedThreadProperties(DkmWorkList, DkmCompletionRoutine<DkmGetManagedThreadPropertiesAsyncResult>)

Получение свойств управляемого потока.

Этот метод добавляет новый рабочий элемент в указанный список работ и возвращается после добавления рабочего элемента. Фактическая обработка рабочего элемента является асинхронной. Вызывающий объект получит уведомление о том, что запрос завершен с помощью процедуры завершения.

(Унаследовано от DkmThread)
GetManagedThreadProperties(Int32)

Получение свойств управляемого потока.

(Унаследовано от DkmThread)
GetMinidumpThreadInfo(DkmMinidumpThreadInfo)

Получает сведения о состоянии потока, хранящиеся в Minidump.

Этот API появился в Visual Studio 17 RTM (DkmApiVersion.VS17RTM).

(Унаследовано от DkmThread)
GetStackAddressRange()

Извлекает предел стека или базу стека заданного потока. Обратите внимание, что это значение может изменяться со временем, например в случае волокон.

(Унаследовано от DkmThread)
GetSteppers()

GetSteppers перечисляет элементы DkmStepper этого объекта DkmThread.

(Унаследовано от DkmThread)
GetSuspensionCount(Boolean)

Возвращает текущее число приостановки этого потока.

(Унаследовано от DkmThread)
GetSuspensionCount(DkmWorkList, Boolean, DkmCompletionRoutine<DkmGetSuspensionCountAsyncResult>)

Возвращает текущее число приостановки этого потока.

Этот метод добавляет новый рабочий элемент в указанный список работ и возвращается после добавления рабочего элемента. Фактическая обработка рабочего элемента является асинхронной. Вызывающий объект получит уведомление о том, что запрос завершен с помощью процедуры завершения.

(Унаследовано от DkmThread)
GetThreadCurrentWinRtErrorInfo()

GetThreadCurrentWinRtErrorInfo используется для получения адреса текущего объекта IErrorInfo для этого потока.

Этот API появился в Visual Studio 12 RTM (DkmApiVersion.VS12RTM).

(Унаследовано от DkmThread)
GetTlsValue(Int32)

Извлекает значение в слоте локального хранилища потока отладчика (TLS) для указанного индекса TLS. Каждый поток процесса имеет собственную ячейку для каждого индекса TLS.

(Унаследовано от DkmThread)
GetTopStackFrame()

Возвращает верхний кадр стека вызовов для потока. Обычно это значение кэшируется после первого шага стека и очищается при продолжении. Это можно вызвать только над поставщиком стека в клиентском процессе. Чтобы получить верхний кадр в серверном процессе, вызовите Метод GetTopStackWalkFrame.

Ограничение расположения: API должен вызываться из компонента интегрированной среды разработки (уровень > компонента 100 000).

(Унаследовано от DkmThread)
GetTopStackWalkFrame(DkmRuntimeInstance)

Возвращает верхний кадр стека для потока. Этот кадр может поступать из экземпляра среды выполнения или средства очистки монитора. Это можно вызвать только из серверного процесса. Чтобы получить верхний кадр в клиентском процессе, используйте GetTopStackFrame.

Ограничение расположения. API должен вызываться из компонента Monitor (уровень < компонента 100 000).

(Унаследовано от DkmThread)
GetVolatileFlags()

Получение флагов переменных о потоке. Например, возвращает значение , если поток является запланированным потоком в пользовательском режиме.

(Унаследовано от DkmThread)
GetVolatileFlags(DkmWorkList, DkmCompletionRoutine<DkmGetVolatileFlagsAsyncResult>)

Получение флагов переменных о потоке. Например, возвращает значение , если поток является запланированным потоком в пользовательском режиме.

Этот метод добавляет новый рабочий элемент в указанный список работ и возвращается после добавления рабочего элемента. Фактическая обработка рабочего элемента является асинхронной. Вызывающий объект получит уведомление о том, что запрос завершен с помощью процедуры завершения.

(Унаследовано от DkmThread)
GetVolatileProperties(DkmWorkList, DkmCompletionRoutine<DkmGetVolatilePropertiesAsyncResult>)

Получение динамических свойств потока.

Этот метод добавляет новый рабочий элемент в указанный рабочий список и возвращается после добавления рабочего элемента. Фактическая обработка рабочего элемента является асинхронной. Вызывающий объект получит уведомление о том, что запрос завершен в рамках процедуры завершения.

(Унаследовано от DkmThread)
GetVolatileProperties(Int32, UInt64)

Получение динамических свойств потока.

(Унаследовано от DkmThread)
IsStoppingEventQueued(Boolean)

Указывает, имеет ли данный поток событие остановки в очереди. Эти сведения используются диспетчером выполнения для определения возможности скольжение потока.

(Унаследовано от DkmThread)
OnBeginFuncEvalExecution(DkmFuncEvalFlags)

OnBeginFuncEvalExecution вызывается базовым монитором отладки в потоке событий. Этот метод вызывается как часть реализации IDkmBaseFuncEvalService.BeginFuncEvalExecution, которая вызывается для возобновления процесса для оценки функции. OnBeginFuncEvalExecution обновит внутреннее состояние объекта DkmProcess, чтобы указать, что выполняется вычисление функции. Это также отправляет событие FuncEvalStarting и помечает процесс как запущенный, так что никакие операции, требующие остановки процесса, не будут разрешены.

(Унаследовано от DkmThread)
OnContinueExecution()

OnContinueExecution вызывается базовым монитором отладки в потоке событий. Этот метод вызывается в рамках реализации IDkmContinueExecution.ContinueExecution, который используется интегрированной среды разработки для продолжения целевого процесса. Этот метод используется диспетчером для отправки событий остановки, которые не удалось обработать ранее, или для обновления внутреннего состояния объекта DkmProcess, чтобы указать, что целевой процесс выполняется. Прежде чем пометить процесс как запущенный, диспетчер отправит событие Continue.

Базовый монитор отладки должен ожидать повторного вызова, пока он находится в этом методе.

(Унаследовано от DkmThread)
OnEmbeddedBreakpointHit(DkmInstructionAddress, Boolean)

Вызовите событие EmbeddedBreakpointHit. Компоненты, реализующие интерфейс приемника событий, получат уведомление о событии. Этот метод будет поставить событие в очередь, а элемент управления немедленно вернется вызывающей объекту.

(Унаследовано от DkmThread)
OnInterceptExceptionCompleted(UInt64)

Вызов события InterceptExceptionCompleted. Компоненты, реализующие интерфейс приемника событий, получат уведомление о событии. Этот метод будет поставить событие в очередь, а элемент управления немедленно вернется вызывающей объекту.

(Унаследовано от DkmThread)
OnThreadNameChange()

ThreadNameChange отправляется диспетчером при вызове монитором DkmThread::NameChange.

Этот API появился в Visual Studio 14 RTM (DkmApiVersion.VS14RTM).

(Унаследовано от DkmThread)
RaiseExecutionControlException(UInt32)

API, который может вызываться из реализации IDkmSingleStepCompleteReceived или IDkmRuntimeBreakpointReceived, чтобы при возобновлении выполнения базового dm запускало исключение EXCEPTION_BREAKPOINT или EXCEPTION_SINGLE_STEP в целевом процессе. Обычно исключение точки останова или одношагового исключения неявно подавляется. Это позволяет обрабатывать EXCEPTION_BREAKPOINT/EXCEPTION_SINGLE_STEP обработчиками исключений в целевом процессе. Этот API завершится ошибкой, если поток не находится на этапе завершения или события точки останова.

Ограничение расположения: API должен вызываться из компонента Monitor (уровень < компонента 100 000).

(Унаследовано от DkmThread)
RemoveDataItem<T>()

Удалите экземпляр T из этого контейнера. Обычно не требуется вызывать этот метод, так как контейнер данных автоматически очищается при закрытии объекта.

(Унаследовано от DkmDataContainer)
Resume(Boolean)

Возобновить этот поток.

(Унаследовано от DkmThread)
SetContext(Byte[])

Обновление контекста (регистра значений) потока.

(Унаследовано от DkmThread)
SetDataItem<T>(DkmDataCreationDisposition, T)

Поместите новый элемент в контейнер данных.

(Унаследовано от DkmDataContainer)
SetExtendedRegisterValue(Int32, ReadOnlyCollection<Byte>)

Задает значение расширенного регистра в контексте потока.

(Унаследовано от DkmThread)
SetTlsValue(Int32, UInt64)

Сохраняет значение в слоте локального хранилища потока отладки (TLS) для указанного индекса TLS. Каждый поток процесса имеет собственную ячейку для каждого индекса TLS.

(Унаследовано от DkmThread)
Suspend(Boolean)

Приостановить этот поток.

(Унаследовано от DkmThread)
Unload(Int32)

ThreadExit отправляется диспетчером при вызове монитором DkmThread::Unload.

Этот метод может вызываться только компонентом, создавший объект .

(Унаследовано от DkmThread)

Применяется к