Определить, вызывается ли код из обработчика исключений (с помощью оператора)? - PullRequest
2 голосов
/ 30 июля 2010

Я хочу сделать что-нибудь слегка глупое.В моем методе Dispose() для объекта я хочу напечатать трассировку отладки для объекта, сообщая обо всех событиях, которые произошли, когда он был жив.

Но так как это требует времени и денег, я хочу толькосделать это, если Dispose() вызывается из-за того, что было сгенерировано исключение.

Поэтому я хотел бы сделать

if (exceptionIsCurrentlyRaised) PrintDebugStuff();

Имеет ли .NET такое свойство exceptionIsCurrentlyRaised, к которому я могу обратиться?

Ответы [ 3 ]

0 голосов
/ 30 июля 2010

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

Даже если вы смогли вызвать некоторый API отладки, который мог бы дать вам доступ к текущему исключению внутри блока catch, я не думаю, что вы могли бы получить исключение внутри блока finally (где ваш Dispose метод будет выполнен). К тому времени исключение могло быть обработано, поэтому, что касается времени выполнения, исключения не существует.

Единственный способ убедиться, что это происходит, - это зарегистрироваться, чтобы получать уведомления о всех исключениях с момента создания вашего объекта, и оттуда пытаться выяснить, было ли исключение обнаружено или нет. Этот ответ может быть полезен: .NET - Первый случайный слушатель исключений для интенсивной отладки?

0 голосов
/ 30 июля 2010

На самом деле это что-то вроде «IntelliTrace» в Visual Studio 2010, которая может записывать то, что происходило во время сеанса отладки, когда вы были не в точке останова.

0 голосов
/ 30 июля 2010

Я не знаю, существует ли что-то подобное, поскольку я никогда не видел этого.Но, похоже, вы могли бы просто создать интерфейс с единственным свойством bool.Затем, когда вы находитесь внутри оператора catch, но прежде чем вызывать метод dispose, просто установите флаг.

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

РЕДАКТИРОВАТЬ: Хорошо, я также нашел эту статью SO, которая имеет аналогичную проблему: Определите, выполняется ли в блоке finally из-за генерируемого исключения

...