|
|
От: |
Odi$$ey
|
http://malgarr.blogspot.com/ |
| Дата: | 08.06.07 06:36 | ||
| Оценка: | 6 (2) | ||
Когда JIT-компилятор компилирует IL-код метода в машинный код, он проверяет, была ли сборка, в которой определен метод, скомпилирована без оптимизаций и выполняется ли процесс с отладчиком. Если и то и другое верно, JIT-компилятор генерирует внутреннюю таблицу корней метода так, чтобы искусственно продлить время жизни всех переменных до завершения метода.
...
При компиляции метода JIT-компилятор смотрит, чтобы сборка, определяющая метод, содержала атрибут SystemJDiagnosticsDebuggableAttribute, а аргумент isJITOptimizerDisabled его конструктора был равен true. Если JIT-компилятор обнаружит, что этот атрибут задан, он также скомпилирует метод, искусственно продлевая время жизни всех переменных до окончания метода. При указании параметра компилятора /debug+ компилятор С# добавляет этот атрибут в готовую сборку. Учтите, что параметр /optimize+ компилятора С# может вновь включить оптимизацию, поэтому при выполнении такого эксперимента этот параметр компилятора указывать не следует. Таким образом, JIT-компилятор помогает своевременно выполнить отладку.