Выпуск символьных сведений с помощью порождения отражения
Обновлен: Ноябрь 2007
Порождение отражения позволяет определять для динамических модулей символьные данные. Символьные данные можно определять с использованием стандартного интерфейса модуля записи символов или же с помощью задаваемого вызывающим объектом интерфейса модуля записи символов. Порождение отражения обеспечивает удобную высокоуровневую абстракцию низкоуровневых интерфейсов средства записи символов в пространстве имен 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.