Как распечатать текущую трассировку стека in.NET без каких-либо исключений?
У меня есть обычный код на C#. у меня нет исключений. Я хочу программно зарегистрировать текущую трассировку стека для отладки. Пример:
public void executeMethod()
{
logStackTrace();
method();
}
5 ответов:
посмотреть
System.Diagnostics
пространство имен. Там много вкусностей!System.Diagnostics.StackTrace t = new System.Diagnostics.StackTrace();
Это действительно хорошо, чтобы ткнуть вокруг, чтобы узнать, что происходит под капотом.
Я бы рекомендовал вам изучить решения для ведения журнала (такие как NLog, log4net или Microsoft patterns and practices Enterprise Library), которые могут достичь ваших целей, а затем некоторых. Удачи, приятель!
есть два способа сделать это. Элемент
System.Diagnostics.StackTrace()
даст вам трассировки стека для текущего потока. Если у вас есть ссылка наThread
например, вы можете получить трассировку стека для этого через перегруженную версиюStackTrace()
.вы также можете проверить вопрос переполнения стека как получить stacktrace non-current thread?.
Это также можно сделать в отладчике Visual Studio без изменения кода.
- создайте точку останова, где вы хотите увидеть трассировку стека.
- щелкните правой кнопкой мыши точку останова и выберите "действия..."в VS2015. В VS2010, выберите "при попадании...", затем включите "печать сообщения".
- убедитесь, что выбрано "продолжить выполнение".
- Введите текст, который вы хотели бы распечатать.
- добавить $CALLSTACK везде, где вы хотите видеть трассировка стека.
- запустить программу в отладчике.
конечно, это не поможет, если вы используете код на другой машине, но это может быть очень удобно, чтобы иметь возможность выплюнуть трассировку стека автоматически, не затрагивая код выпуска или даже без необходимости перезагрузки программы.