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


Выпуск символьных сведений с помощью порождаемого отражения

Порождение отражения позволяет определять для динамических модулей символьные данные. Символьные данные можно определять с использованием стандартного интерфейса модуля записи символов или же с помощью задаваемого вызывающим объектом интерфейса модуля записи символов. Порождение отражения обеспечивает удобную высокоуровневую абстракцию низкоуровневых интерфейсов средства записи символов в пространстве имен System.Diagnostics.SymbolStore.

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

Порождение отражения предоставляет следующие методы эмиссии символьных данных.

  • Интерфейс средства записи символов, связанный с динамическим модулем, может быть получен с помощью метода ModuleBuilder.GetSymWriter.

  • Точку входа пользователя для динамического модуля можно определить с помощью метода ModuleBuilder.SetUserEntryPoint. Точка входа пользователя — это метод, который пользователь определяет как точку входа, а не созданные вызывающим объектом заглушки перед основным методом.

  • Объекты документа определяются с помощью метода ModuleBuilder.DefineDocument.

  • Пользовательские атрибуты, хранящиеся в хранилище символов, определены для модулей, методов и конструкторов с помощью методов ModuleBuilder.SetSymCustomAttribute, MethodBuilder.SetSymCustomAttribute и, соответственно, ConstructorBuilder.SetSymCustomAttribute.

  • Точки следования идентифицируются с помощью метода ILGenerator.MarkSequencePoint.

  • Лексические области определены с помощью методов ILGenerator.BeginScope и ILGenerator.EndScope.

  • Имя локальной переменной в методе или конструкторе может быть задано с помощью метода LocalBuilder.SetLocalSymInfo. При необходимости может быть задана лексическая область локальной переменной. Объект LocalBuilder получается путем вызова перегрузки ILGenerator.DeclareLocal.

См. также

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

Использование порождаемого отражения