Можно ли получить значения параметров для каждого кадра в стеке вызовов в .NET

StackOverflow https://stackoverflow.com/questions/819576

  •  03-07-2019
  •  | 
  •  

Вопрос

Я говорю об управляемом .NET-коде. Если мы запустим какую-либо программу и подключим к ней VS, мы сможем увидеть значения параметров для каждого метода в стеке вызовов. Я хотел бы создать решение для ведения журнала, которое будет регистрировать значения всех параметров для каждого метода в стеке вызовов. На самом деле мне нужна эта информация в случае возникновения исключения.

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

ОБНОВЛЕНИЕ: Хорошо, возможно, с чистым .NET это невозможно. Тогда может быть с каким-то неуправляемым кодом ... смысл в том, чтобы сделать это из самого приложения. Приложение в случае исключения может вызвать некоторую библиотеку (может быть неуправляемую), которая возвращает информацию о значениях методов в стеке вызовов. Просто мысли ...

Это было полезно?

Решение

Значения параметров не сохраняются в экземпляре StackFrame. На самом деле они вообще не записываются / не регистрируются, если вы не решите сделать это явно.

Одним из очевидных способов регистрации значений тезисов является использование AOP. Это, безусловно, подразумевает затраты, но в сочетании с каркасом ведения журнала и правильным уровнем ведения журнала это может быть альтернативой. Вы также можете выбрать инструмент только некоторых типов / методов в вашем базовом коде, где с большей вероятностью будут генерироваться исключения. Я бы, вероятно, выбрал Postsharp для его статического ткачества, чтобы генерировать вызовы журнала.

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

Другие советы

Лучше всего, возможно, вставить требуемый код трассировки в соответствующие методы. Таким образом, вы можете присоединить слушателей трассировки и вывести значения при необходимости.

Я знаю, что это не то, что вы просите, но это один из способов получить данные.

Кроме того, вы можете отлаживать приложение с помощью WinDbg. Команды! Clstack /! Dso позволяют вам проверять параметры и составлять объекты.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top