Есть ли способ войти или перехватить исключения первого шанса - PullRequest
8 голосов
/ 02 ноября 2008

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

Ответы [ 3 ]

19 голосов
/ 29 января 2011

Я гуглил FirstChanceException и не могу удержаться, чтобы ответить на него более двух лет спустя ...

Теперь в .net 4.0 вы можете перехватить событие FirstChanceException домена приложения. Это только событие, поэтому вы не можете обработать ошибку, но это хороший, центральный способ получения информации об исключениях, независимо от того, обработаны они или нет. Событие FirstChanceException генерируется до того, как блоку catch будет разрешено его обрабатывать. Я не нашел много информации об этом, но кроме документации Microsoft, один из лучших источников - Блог Митча Селлерса .

2 голосов
/ 03 ноября 2008

Я думаю, что единственный способ получить эту информацию в .NET - использовать отладчик.

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

Лучшим решением было бы использовать возможности Trace и Assert в пространстве имен System.Diagnostics для выборочного отслеживания состояния программы или использовать средство ведения журнала (log4net, EnterpriseLibrary, NLog, свернуть свой собственный простой) для выгрузки потока / стек / переменная информация, как вы идете.

В любом случае добавление всей этой дополнительной информации - это большие затраты.

РЕДАКТИРОВАТЬ: я получил новости об этом проекте в моей ленте: NTrace . Похоже, это будет соответствовать немного больше того, что вы пытаетесь сделать.

1 голос
/ 06 ноября 2008

Использование Adplus . Он прикрепит отладчик к процессу и сгенерирует (по умолчанию) небольшой мини-дамп при увеличении первого шанса. Сгенерированный Adplus файл журнала также будет содержать информацию об исключениях. Просто убедитесь, что у вас есть PDB, чтобы увидеть полную информацию о Calstack.

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