Как регистрировать сообщения об утверждении с помощью специального `TraceListener` - PullRequest
1 голос
/ 05 октября 2011

Я реализовал пользовательский TraceListener, который регистрирует сообщения, отправленные методу Write, и выводит их в трассировку Win32, используя функцию Win32 API OutputDebugString. Всякий раз, когда мое приложение использует System.Diagnostics.Debug.Write или System.Diagnostics.Trace.Write, сообщения правильно обрабатываются прослушивателем трассировки.

Однако, если мое приложение сталкивается с утверждением, таким как System.Diagnostics.Debug.Assert, я бы хотел перехватить то, что отправлено на вывод отладки. Каким-то образом прослушиватель трассировки не вызывается с сообщениями, созданными assert. Это возможно? Или я должен предоставить собственную реализацию Assert, чтобы это работало?

1 Ответ

3 голосов
/ 05 октября 2011

Вы строите в режиме релиза? В Debug.Assert определен атрибут ConditionalAttribute для символа DEBUG, поэтому вызовы удаляются компилятором в режиме Release.

Debug.Assert вызывает метод Fail на слушателе трассировки. Это реализовано правильно? Если вы не переопределили его, то по умолчанию вызывается WriteLine с добавлением «Fail:».

...