Есть ли способ проверить переменные стека во время выполнения в C #? - PullRequest
4 голосов
/ 27 февраля 2011

Есть ли способ выгрузить содержимое стека во время выполнения?

Меня интересует информация о родительских функциях (имя, параметры, строка), которую я знаю, которую могу получить с помощью StackTrace и StackFrameклассы.Тем не менее, я также хотел бы получить переменные в стеке (локальные переменные, объявленные в методе, вызвавшем тот, который выполняется в данный момент).Поскольку отладчик Visual Studio может сделать это, я думаю, что может быть способ сделать это также во время выполнения в коде.Есть ли такой способ?

1 Ответ

1 голос
/ 27 февраля 2011

Полагаю, есть два способа достичь этого.

Ваш первый вариант - использовать инфраструктуру AOP для внедрения инструментария в качестве шага после компиляции. Это может быть точно нацелено и позволяет вам делать практически все, что вы хотите, но работает лучше всего, когда вы можете изолировать желаемые дополнительные поведения от остальной части кода. PostSharp является ведущим соперником в этой области, но я уверен, что есть и другие.

Ваш второй вариант - подключиться к API профилировщика, что и делают TypeMock Isolator и собственные Moles от Microsoft. По сути, это дает вам возможность перехватывать все, но является достаточно программно-инвазивным и, конечно, не тривиальной задачей для реализации. На самом деле, я бы никому не рекомендовал такой подход, кроме как упомянуть его для полноты.

...