DkmModuleInstance Класс

Определение

Класс Module Instance представляет пакет кода (например, dll или exe), который загружается в определенный процесс в определенном расположении. Объекты экземпляра модуля имеют значение 1:1 с понятием среды выполнения пакета кода. Например, в машинном коде объекты экземпляра модуля представляют собой 1:1 с базовым адресом.

Производные классы: DkmClrModuleInstance, DkmClrNcModuleInstance, DkmCustomModuleInstance, DkmNativeModuleInstance, DkmClrNcContainerModuleInstance

public ref class DkmModuleInstance abstract : Microsoft::VisualStudio::Debugger::DkmDataContainer
[System.Runtime.InteropServices.Guid("74857b6f-618d-66e3-149e-6cebf4c4123e")]
public abstract class DkmModuleInstance : Microsoft.VisualStudio.Debugger.DkmDataContainer
[<System.Runtime.InteropServices.Guid("74857b6f-618d-66e3-149e-6cebf4c4123e")>]
type DkmModuleInstance = class
    inherit DkmDataContainer
Public MustInherit Class DkmModuleInstance
Inherits DkmDataContainer
Наследование
Наследование
DkmModuleInstance
Производный
Атрибуты

Свойства

BaseAddress

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

Connection

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

Flags

Флаги, указывающие признаки DkmModuleInstance.

FullName

Полное имя модуля. Для файловых модулей это полный путь к модулю (например, c:\windows\system32\kernel32.dll.

IsDisabled

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

IsUnloaded

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

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

Строковое описание контекста, в который был загружен этот модуль. Например, Win32 или CLR версии 2.0.50727: домен по умолчанию.

LoadOrder

Целочисленное число экземпляров модуля, загруженных до и включая этот модуль. Каждый экземпляр среды выполнения отслеживает собственный порядок загрузки.

MemoryLayout

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

MinidumpInfoPart

[Необязательно] MinidumpInfoPart используется для передачи дополнительных сведений о модулях в DkmProcess для минидампа.

Module

[Необязательно] Представление обработчика символов модуля (DkmModule), связанного с этим экземпляром модуля. Изначально это значение равно NULL и присваивается, если с этим экземпляром модуля связаны символы.

Name

Краткое представление имени модуля. Для файловых модулей это имя и расширение файла (например, kernel32.dll).

Process

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

RuntimeInstance

Класс DkmRuntimeInstance представляет среду выполнения, которая загружается в DkmProcess и содержит код для отладки.

Size

[Необязательно] Количество байтов в области памяти модуля. Это значение будет равно нулю, если модуль не загрузится в непрерывном блоке памяти.

SymbolFileId

[Необязательно] Содержит сведения, необходимые для поиска символов для этого модуля. В Win32 эти сведения содержатся в IMAGE_DEBUG_DIRECTORY.

TagValue

DkmModuleInstance — это абстрактный базовый класс. Это перечисление указывает, какой производный класс является экземпляром этого объекта.

TimeDateStamp

Дата и время сборки загруженного модуля. Это значение получается из IMAGE_NT_HEADERS загруженного модуля. Единица измерения — это значение FILETIME, которое представляет собой 64-разрядное значение, представляющее количество 100-наносекундных интервалов с 1 января 1601 г. (UTC).

UniqueId

Уникально идентифицирует объект DkmModuleInstance.

Version

[Необязательно] Сведения о версии файла.

Методы

ClearTransitionModuleFlag()

Экземпляры среды выполнения вызывают этот метод, чтобы пометить модуль как пограничный модуль. При пошаговом выполнении среды выполнения должны проверка, если шаг достиг пограничного модуля, и при необходимости начать арбитраж шагов. Обратите внимание, что некоторые среды выполнения могут не выполнить этот запрос. Диспетчер будет вести подсчет количества вызовов FlagAsTransitionModule. Модуль больше не будет считаться переходным модулем, только если соответствующее число вызовов ClearTransitionModuleFlag.

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

Decompile()

Декомпилирует код модуля на C# и создает новый переносимый PDB-файл с внедренным источником. Все модули, которые совместно используют этот файл символов, начнут использовать эти обновленные символы.

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

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

Decompile(DkmWorkList, DkmCompletionRoutine<DkmDecompileAsyncResult>)

Декомпилирует код модуля на C# и создает новый переносимый PDB-файл с внедренным источником. Все модули, которые совместно используют этот файл символов, начнут использовать эти обновленные символы.

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

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

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

Decompile(DkmWorkList, DkmCompletionRoutine<DkmDecompileAsyncResult173>)

Декомпилирует код модуля на C# и создает новый переносимый PDB-файл с внедренным источником. Все модули, которые совместно используют этот файл символов, начнут использовать эти обновленные символы. Реализации должны возвращать S_OK при сбое и возвращать фактические данные HRESULT и любые дополнительные сведения об ошибке с помощью параметров HR и ErrorMessage.

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

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

Этот API появился в Visual Studio 17 с обновлением 3 (DkmApiVersion.VS17Update3).

Decompile(String, Int32)

Декомпилирует код модуля на C# и создает новый переносимый PDB-файл с внедренным источником. Все модули, которые совместно используют этот файл символов, начнут использовать эти обновленные символы. Реализации должны возвращать S_OK при сбое и возвращать фактические данные HRESULT и любые дополнительные сведения об ошибке с помощью параметров HR и ErrorMessage.

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

Этот API появился в Visual Studio 17 с обновлением 3 (DkmApiVersion.VS17Update3).

FlagAsTransitionModule()

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

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

GetDataItem<T>()

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

(Унаследовано от DkmDataContainer)
GetGPUDisassembly(UInt64, UInt32, Boolean, Boolean)

Получите дизассемблированное значение диапазона адресов в экземпляре модуля отладки.

GetGPUDisassemblySize()

Возвращает размер дизассемблатора в экземпляре модуля отладки.

GetNextGPUInstructionAddress(UInt64)

Возвращает адрес следующей инструкции относительно начального адреса.

GetSymbolLoadInformation()

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

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

GetSymbolSearchResult()

Извлекает любые результаты поиска символов, связанные с этим экземпляром модуля.

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

Этот API появился в Visual Studio 17 с обновлением 3 (DkmApiVersion.VS17Update3).

GetSymbolSearchResult(DkmWorkList, DkmCompletionRoutine<DkmGetSymbolSearchResultAsyncResult>)

Извлекает любые результаты поиска символов, связанные с этим экземпляром модуля.

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

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

Этот API появился в Visual Studio 17 с обновлением 3 (DkmApiVersion.VS17Update3).

GetSymbolStatusMessage(Boolean)

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

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

GetSymbolStatusMessage(DkmWorkList, Boolean, DkmCompletionRoutine<DkmGetSymbolStatusMessageAsyncResult>)

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

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

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

IsSuppressed()

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

Этот API появился в Visual Studio 12 с обновлением 3 (DkmApiVersion.VS12Update3).

IsTransitionModule()

Возвращает значение true, если какой-либо экземпляр среды выполнения помечает этот модуль как модуль перехода.

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

IsUserCode()

Определяет, считается ли модуль пользовательским кодом.

Ограничение расположения. Этот метод можно вызвать из компонента интегрированной среды разработки. Начиная с Visual Studio 2013 с обновлением 2 его также можно вызвать из компонента мониторинга для управляемого кода. В Visual Studio 2017 с обновлением 8 callDirection API был сделан "двунаправленным" из "Normal" и теперь может вызываться из любого компонента. AsyncCaller было задано значение true, а для CallerLocationConstraint — значение None из NoMarshalling.

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

IsUserCode(DkmWorkList, DkmCompletionRoutine<DkmModuleInstanceIsUserCodeAsyncResult>)

Определяет, считается ли модуль пользовательским кодом.

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

Ограничение расположения. Этот метод можно вызвать из компонента интегрированной среды разработки. Начиная с Visual Studio 2013 с обновлением 2 его также можно вызвать из компонента мониторинга для управляемого кода. В Visual Studio 2017 с обновлением 8 callDirection API был сделан "двунаправленным" из "Normal" и теперь может вызываться из любого компонента. AsyncCaller было задано значение true, а для CallerLocationConstraint — значение None из NoMarshalling.

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

OnBinaryLoaded(String)

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

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

OnBinaryReloadOpportunity()

Создайте событие BinaryReloadOpportunity. Компоненты, реализующие интерфейс приемника событий, получат уведомление о событии. Элемент управления возвращается после уведомления всех компонентов.

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

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

OnModuleModified()

Этот метод вызывается при изменении модуля из-за EnC или динамически выдаваемого кода.

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

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

OnSymbolsLoaded(DkmModule, Boolean)

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

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

OnSymbolsUpdated(DkmModule)

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

ReadSymbols()

Этот метод вызывается обработчиками символов для чтения символов для экземпляров DkmModuleInstance, символы которых находятся в памяти отладчика.

RemoveDataItem<T>()

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

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

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

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

Обновления состояние отключенного модуля. Этот метод может вызываться только из события ModuleInstanceLoad. При отключении модуля обычно также подавляется событие загрузки модуля.

SetModule(DkmModule, Boolean)

Этот метод вызывается поставщиком символов для связывания DkmModule с DkmModuleInstance и для активации события ModuleSymbolsLoaded. Он может вызываться только один раз для объекта DkmModuleInstance. Вызов этого API создаст связь DkmModule-DkmModuleInstance<>, а также вызовет событие ModuleSymbolsLoaded.

TryLoadBinary()

Попытайтесь загрузить двоичный файл, который ранее не удалось загрузить, используя обновленные пути к символам.

TryLoadBinary(DkmWorkList, DkmCompletionRoutine<DkmTryLoadBinaryAsyncResult>)

Попытайтесь загрузить двоичный файл, который ранее не удалось загрузить, используя обновленные пути к символам.

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

TryLoadSymbols()

Вызывается для запуска загрузки символов для экземпляров DkmModuleInstance, символы которых не были найдены при загрузке модуля.

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

TryLoadSymbols(DkmSymbolLoadFlags)

Вызывается для запуска загрузки символов для экземпляров DkmModuleInstance, символы которых не были найдены при загрузке модуля.

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

Этот API появился в Visual Studio 17 с обновлением 4 (DkmApiVersion.VS17Update4).

TryLoadSymbols(DkmWorkList, DkmCompletionRoutine<DkmTryLoadSymbolsAsyncResult>)

Вызывается для запуска загрузки символов для экземпляров DkmModuleInstance, символы которых не были найдены при загрузке модуля.

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

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

TryLoadSymbols(DkmWorkList, DkmSymbolLoadFlags, DkmCompletionRoutine<DkmTryLoadSymbolsAsyncResult>)

Вызывается для запуска загрузки символов для экземпляров DkmModuleInstance, символы которых не были найдены при загрузке модуля.

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

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

Этот API появился в Visual Studio 17 с обновлением 4 (DkmApiVersion.VS17Update4).

TryLoadSymbolsCallback()

Вызывается для запуска загрузки символов для экземпляров DkmModuleInstance, символы которых не были найдены при загрузке модуля.

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

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

TryLoadSymbolsCallback(DkmWorkList, DkmCompletionRoutine<DkmTryLoadSymbolsCallbackAsyncResult>)

Вызывается для запуска загрузки символов для экземпляров DkmModuleInstance, символы которых не были найдены при загрузке модуля.

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

Ограничение расположения. Это можно вызвать с клиента или сервера. Серверная реализация этого является кэшем для предотвращения ненужных сетевых вызовов. Клиент переходит непосредственно к "реальной" реализации, которая также гарантирует, что повторные проверки возвращаются рано.

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

TryLoadSymbolsCallback177(DkmSymbolLoadFlags)

Вызывается для запуска загрузки локально представленных символов для объектов DkmModuleInstances, символы которых не были найдены при загрузке модуля.

Ограничение расположения. Это можно вызвать с клиента или сервера. Серверная реализация этого является кэшем для предотвращения ненужных сетевых вызовов. Клиент переходит непосредственно к "реальной" реализации, которая также гарантирует, что повторные проверки возвращаются рано.

Этот API появился в Visual Studio 17 с обновлением 7 (DkmApiVersion.VS17Update7).

TryLoadSymbolsCallback177(DkmWorkList, DkmSymbolLoadFlags, DkmCompletionRoutine<DkmTryLoadSymbolsCallback177AsyncResult>)

Вызывается для запуска загрузки локально представленных символов для объектов DkmModuleInstances, символы которых не были найдены при загрузке модуля.

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

Ограничение расположения. Это можно вызвать с клиента или сервера. Серверная реализация этого является кэшем для предотвращения ненужных сетевых вызовов. Клиент переходит непосредственно к "реальной" реализации, которая также гарантирует, что повторные проверки возвращаются рано.

Этот API появился в Visual Studio 17 с обновлением 7 (DkmApiVersion.VS17Update7).

Unload()

Пометьте объект Unload как выгруженный и уведомите компоненты, реализующие интерфейс приемника событий. Элемент управления возвращается после уведомления всех компонентов.

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

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