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


Изменения API отладки в платформе .NET Framework 2.0

В этом разделе объясняются изменения в платформе .NET Framework версии 2.0, которые необходимо учитывать при использовании API отладки среды CLR.

Изменения API

  • CorDebug больше не является компонентным классом. Вместо компонентного создания этого объекта следует воспользоваться функцией глобальной статистики CreateDebuggingInterfaceFromVersion в API размещения. Версией отладчика должна быть одна из констант для перечисления CorDebugInterfaceVersion в CorDebug.idl. (Если отладчик поддерживает платформу .NET Framework 2.0, используйте константу CorDebugVersion_2_0.) Чтобы получить номер версии отлаживаемого объекта для запущенного процесса, используйте глобальную статическую функцию GetVersionFromProcess в API размещения. Кроме того, с помощью глобальной агрегатной функции GetRequestedRuntimeVersion в API размещения можно получить наилучшую гипотезу относительно версии, которая будет загружена для данного EXE-файла на диске, либо предоставить возможность пользователю выбрать версию среды выполнения. (С помощью глобальной агрегатной функции GetRequestedRuntimeInfo в API размещения можно определить, является ли предоставленная пользователем строка допустимым номером версии.) Все эти функции определены в MSCorEE.idl.

  • Отладчик должен реализовать интерфейс ICorDebugManagedCallback2, чтобы в нем можно было распознать отладчик, поддерживающий платформу .NET Framework 2.0.

  • Возвращаемые интерфейсом ICorDebugEnum значения в платформе .NET Framework 2.0 являются COM-совместимыми.

  • В трассировках стека, в которые среда выполнения вставила особый кадр для выполнения определенной задачи, может появиться новый объект ICorDebugInternalFrame. Эти кадры не будут отвечать на запросы QueryInterface интерфейса ICorDebugNativeFrame или ICorDebugILFrame.

  • Время ожидания метода ICorDebugController::Stop игнорируется.

  • Метод ICorDebugModule::EnableJITDebugging можно использовать только при первой загрузке метода. Если этот метод используется в обратном вызове ModuleLoad, осуществляемом в рамках операции attach, при его выполнении произойдет сбой. (Это ограничение гарантирует согласованность кода для всех функций в модуле.)

  • Машинный код для данной функции в платформе .NET Framework не обязательно находится в одном непрерывном блоке памяти. Вследствие этого отладчики больше не должны использовать методы GetAddress, GetSize и GetCode интерфейса ICorDebugCode. Вместо них следует использовать методы ICorDebugCode2::GetCodeChunks и ICorDebugProcess::ReadMemory.

  • Отладчики смешанного режима должны задать неуправляемые точки останова, используя новый метод ICorDebugProcess2::SetUnmanagedBreakpoint.

  • Событие завершения выполнения отладки в потоке машинного кода выходит за рамки возможностей платформы .NET Framework 2.0.

  • Правила объявления объектов в API отладки более жесткие. Если операция, успешно выполненная в платформе .NET Framework 1.0 или 1.1, возвращает в среде платформы .NET Framework 2.0 значение CORDBG_E_OBJECT_NEUTERED, время ожидания интерфейса, для которого выполняется операция, истекло и его необходимо получить повторно. Значения, полученные в результате выполнения операций в платформах .NET Framework 1.0 и 1.1, могут быт неверными.

Универсальные шаблоны

Введение универсальных шаблонов в платформе .NET Framework 2.0 рушит множество предположений, которые мог делать отладчик в предыдущих версиях. Отладчики должны перейти к использованию следующих форм функций ICorDebug, поддерживающих универсальные шаблоны.

См. также

Основные понятия

Общие сведения об отладке среды CLR

Другие ресурсы

Отладка (ссылка неуправляемого API)