C #: перебор значений аргументов для функции в другом месте в стеке вызовов - PullRequest
3 голосов
/ 04 февраля 2011

Я хочу проверить аргументы, переданные функциям выше в моем (a?) Стеке вызовов.В Perl я бы использовал Devel :: StackTrace , чтобы получить трассировку стека, получить правильный кадр (объект Devel :: StackTrace :: Frame ), и оттуда у меня будет доступк аргументам это было передано.

Кто-нибудь знает способ сделать это в C #?

Ответы [ 3 ]

3 голосов
/ 04 февраля 2011

Это невозможно в .Net. Самое близкое, что вы можете получить, - перечислить текущие кадры стека с помощью вызова StackTrace::GetFrames. Это предоставит вам доступ к текущему набору StackFrame экземпляров, но оттуда вы не сможете получить доступ к аргументам функции.

EDIT

Судя по вашим комментариям, вам лучше всего воспользоваться библиотекой / инструментами АСП. Как и предполагал @ ChaosPandion , PostSharp является популярным.

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

Я думаю, что это можно сделать с помощью встроенного API для отладки программ .NET, но не из управляемого кода.

Хорошо, MSDN определенно говорит, что API отладки CLR поддерживает это :

Вы можете запросить кадр стека, чтобы получить код, который он выполняет, или получить его аргументы, локальные переменные и собственные регистры.

Это похоже на функцию, которая делает это: ICorDebugILFrame :: GetArgument

0 голосов
/ 04 февраля 2011

Я не знаю полного ответа, но вы захотите использовать то, что называется Отражением, примерно так: stackTrace.GetFrame (1) .GetMethod ()

Я уверен, что вы можете проверить параметры функции, но я не совсем уверен, сможете ли вы получить информацию во время выполнения, такую ​​как фактические значения, которые были переданы параметрам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...