Где узнать о VS отладчике «волшебные имена»

Если вы когда-либо использовали Reflector, вы, вероятно, заметили, что компилятор C # генерирует типы, методы, поля и локальные переменные, которые заслуживают «специального» отображения отладчиком. Например, локальные переменные, начинающиеся с «CS $», не отображаются пользователю. Существуют и другие специальные соглашения об именах для типов закрытия анонимных методов, резервные поля автоматических свойств и т. Д.

Мой вопрос: где узнать об этих соглашениях об именах? Кто-нибудь знает о какой-то документации?

Моя цель – заставить PostSharp 2.0 использовать одни и те же соглашения.

Это недокументированные детали реализации компилятора и могут быть изменены в любое время. (ОБНОВЛЕНИЕ: см. GeneratedNames.cs в источниках C # для текущих данных, приведенное ниже описание несколько устарело.)

Однако, поскольку я хороший парень, вот некоторые из этих деталей:

Если у вас есть неиспользуемая локальная переменная, которую удаляет оптимизатор, мы все равно отправляем информацию об отладке в PDB. Мы закрепили суффикс __Deleted$ на такие переменные, чтобы отладчик знал, что они были в исходном коде, но не представлены в двоичном формате.

Временным слотам переменной, выделенным компилятором, присваиваются имена с шаблоном CS $ X $ Y, где X является «временным видом», а Y – количеством выделенных временных рядов. Временные виды:

 0 --> short lived temporaries 1 --> return value temporaries 2 --> temporaries generated for lock statements 3 --> temporaries generated for using statements 4 --> durable temporaries 5 --> the result of get enumerator in a foreach 6 --> the array storage in a foreach 7 --> the array index storage in a foreach. 

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

Временные виды выше 264 используются для временного использования фиксированной инструкции, фиксирующей строку.

Сгенерированы специальные генерируемые компилятором имена:

 1 --> the iterator state ("state") 2 --> the value of current in an iterator ("current") 3 --> a saved parameter in an iterator 4 --> a hoisted 'this' in an iterator ("this") 5 --> a hoisted local in an iterator 6 --> the hoisted locals from an outer scope 7 --> a hoisted wrapped value ("wrap") 8 --> the closure class instance ("locals") 9 --> the cached delegate instance ("CachedAnonymousMethodDelegate") a --> the iterator instance ("iterator") b --> an anonymous method c --> anonymous method closure class ("DisplayClass") d --> iterator class e --> fixed buffer struct ("FixedBuffer") f --> anonymous type ("AnonymousType") g --> initializer local ("initLocal") h --> query expression temporary ("TransparentIdentifier") i --> anonymous type field ("Field") j --> anonymous type type parameter ("TPar") k --> auto prop field ("BackingField") l --> iterator thread id m --> iterator finally ("Finally") n --> fabricated method ("FabricatedMethod") o --> dynamic container class ("SiteContainer") p --> dynamic call site ("Site") q --> dynamic delegate ("SiteDelegate") r --> com ref call local ("ComRefCallLocal") s --> lock taken local ("LockTaken") 

Шаблон для создания магических имен: PC__SI где:

  • P – CS $ для кэшированных делегатов и отображает экземпляры classов, в противном случае – пустые.
  • N – это оригинальное имя, связанное с вещью, если оно
  • C – символ от 1 до s, указанный выше
  • S – описательный суффикс («текущий», «состояние» и т. Д.), Так что вам не нужно запоминать таблицу при чтении метаданных.
  • Я – дополнительный уникальный номер
  • Как вы отлаживаете хранимые процедуры MySQL?
  • Инструмент разработки Chrome: файл из javascript
  • Метеор: отладка на стороне сервера
  • Где появляется сообщение System.Diagnostics.Debug.Write?
  • Простой способ отладки службы Windows
  • Ошибка Xcode 4 для обозначения журнала сбоев
  • Как редактировать и отлаживать источники библиотеки R
  • Удаленная отладка Java, как она работает технически?
  • Как фильтровать стек вызовов в представлении отладки Eclipse для Java
  • Отслеживать все вызовы метода ObjC?
  • Что такое трассировка стека, и как я могу использовать ее для отладки ошибок моего приложения?
  • Давайте будем гением компьютера.