DkmThread Класс

Определение

DkmThread представляет поток, выполняющийся в целевом процессе.

Производные классы: 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
Наследование
Наследование
Производный
Атрибуты

Свойства

Connection

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

IsMainThread

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

IsUnloaded

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

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

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

Process

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

SystemInformation

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

SystemPart

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

TebAddress

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

UniqueId

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

Методы

BeginFuncEvalExecution(DkmFuncEvalFlags)

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

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

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

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

CanBeginFuncEvalExecution(DkmFuncEvalFlags)

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

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

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

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

DkmThread вызывается отладочным монитором для создания экземпляра DkmThread. Объекты DkmThread для системных потоков создаются базовым монитором отладки. Этот метод должен вызываться в потоке событий.

Этот метод отправляет событие ThreadCreate.

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

CreateFrameRegisters(DkmUnwoundRegister[], UInt32)

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

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

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

EndFuncEvalExecution(DkmFuncEvalFlags)

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

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

GetContext(Int32, Byte[])

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

GetContext(Int32, Void*, Int32)

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

GetCurrentFrameInfo(UInt64, UInt64, UInt64)

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

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

GetCurrentFuncEvalMode()

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

GetCurrentLocation(DkmWorkList, DkmCompletionRoutine<DkmGetCurrentLocationAsyncResult>)

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

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

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

GetCurrentRegisters(DkmUnwoundRegister[])

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

GetDataItem<T>()

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

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

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

GetExtendedRegisters()

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

GetManagedThreadProperties(DkmWorkList, DkmCompletionRoutine<DkmGetManagedThreadPropertiesAsyncResult>)

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

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

GetManagedThreadProperties(Int32)

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

GetMinidumpThreadInfo(DkmMinidumpThreadInfo)

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

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

GetStackAddressRange()

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

GetSteppers()

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

GetSuspensionCount(Boolean)

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

GetSuspensionCount(DkmWorkList, Boolean, DkmCompletionRoutine<DkmGetSuspensionCountAsyncResult>)

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

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

GetThreadCurrentWinRtErrorInfo()

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

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

GetTlsValue(Int32)

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

GetTopStackFrame()

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

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

GetTopStackWalkFrame(DkmRuntimeInstance)

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

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

GetVolatileFlags()

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

GetVolatileFlags(DkmWorkList, DkmCompletionRoutine<DkmGetVolatileFlagsAsyncResult>)

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

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

GetVolatileProperties(DkmWorkList, DkmCompletionRoutine<DkmGetVolatilePropertiesAsyncResult>)

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

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

GetVolatileProperties(Int32, UInt64)

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

IsStoppingEventQueued(Boolean)

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

OnBeginFuncEvalExecution(DkmFuncEvalFlags)

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

OnContinueExecution()

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

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

OnEmbeddedBreakpointHit(DkmInstructionAddress, Boolean)

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

OnInterceptExceptionCompleted(UInt64)

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

OnThreadNameChange()

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

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

RaiseExecutionControlException(UInt32)

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

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

RemoveDataItem<T>()

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

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

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

SetContext(Byte[])

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

SetDataItem<T>(DkmDataCreationDisposition, T)

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

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

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

SetTlsValue(Int32, UInt64)

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

Suspend(Boolean)

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

Unload(Int32)

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

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

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