Вопрос

Я немного запутался в том, как использовать классы .NET Trace и Debug.

Зачем вам утруждать себя использованием Трассировки вместо Отладки?

Trace.TraceError()
Trace.TraceInformation()
Trace.Assert()

Debug.WriteLine()
Debug.Assert()

Кроме того, я понимаю, что инструкции Debug игнорируются, когда вы находитесь в режиме Release config, но если инструкции trace применяются постоянно, как это влияет на производительность?

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

Решение

На самом простом уровне они имеют разные переключатели компиляции, т. е. Debug.WriteLine etc переключается только в том случае, если у вас есть DEBUG символ компиляции (не распространенный для релизных сборок), где-как Trace.WriteLine обычно они включаются даже в релизные сборки.

Тот Самый Trace маршрут имеет настраиваемые прослушиватели трассировки, которые могут быть подключены через конфигурацию; Debug обычно обращается к отладчику в качестве прослушивателя.Конечно, существуют сторонние системы отслеживания, которые предлагают гораздо большую гибкость.

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

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

Эмпирическое правило для меня заключается в том, что я использую debug для получения фактической отладочной информации, т.е.значение переменной x на данный момент равно ...и т.д., и трассировка для отслеживания потока управления через мое приложение (больше похоже на спам).

Как вы сказали, вызовы трассировки выполняются только тогда, когда вы находитесь в режиме выпуска.Компиляция в режиме выпуска имеет некоторые преимущества в производительности, которые могут потребоваться в конечном приложении, и могут быть другие причины, по которым вы хотите включить режим выпуска.Однако могут возникнуть ситуации, когда вам захочется записать информацию в консоль трассировки, которую можно просмотреть с помощью таких приложений, как DbgView от Sysinternal'а.Обычно это сообщения, которые вы не обязательно хотите отправлять на вывод журнала, или которые вы всегда хотите иметь доступными для целей отладки, даже если пользователь отключил ведение журнала.

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

Я обычно использую трассировку (с соответствующим TraceSwitch) для ведения журнала в средах выпуска - быстрая настройка app.config может затем предоставлять разные уровни ведения журнала без необходимости перекомпиляции (которая в любом случае может устранить проблему) или необходимости подключения отладчика.Особенно удобно для проблем, которые по какой-либо причине возникают только на компьютерах клиентов - я использовал это для успешного завершения выхода из FTP-класса (еще в старые времена Framework 1.1), чтобы помочь диагностировать проблемы с передачей данных по сети между двумя компаниями

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