Игнорировать исключения, которые пересекают домены приложений при отладке в Visual Studio 2010 - PullRequest
11 голосов
/ 23 июня 2010

У меня проблемы с отладкой приложения, которое вызывает другой домен AppDomain, потому что, если исключение происходит во всем, что делает другой домен AppDomain, это исключение всплывает и вызывает сбой Visual Studio 2010 независимо от того, что.

Я правильно обернул вызов метода, который добавляет try/catch, и исключение правильно перехватывается, когда я запускаю приложение (приложение ASP.NET MVC) в обычном режиме, но при отладке w3wp.exe в Visual Studio 2010, он всегда прерывает вызов метода, который выбрасывает, и я никак не могу обойти исключение, даже если оно должно быть перехвачено.

Я пытался украсить внешний метод, в котором try/catch и вызов метода throwing выполняются с [DebuggerStepThrough], но это не имеет абсолютно никакого эффекта. Выполнение «Продолжить (F5)», «Перешагнуть (F10)» или «Выходить (F11)» также ничего не дает; Visual Studio просто делает небольшую паузу, а затем снова останавливается в том же месте с точно таким же исключением. Как только Visual Studio остановился в точке, где происходит исключение, кажется, что нет абсолютно никакого способа двигаться дальше.

То, что я делаю в точности, вызывает assembly.GetExportedTypes(), который может выдать, если экспортируемый тип ссылается на сборку, которая не может быть найдена (обстоятельство, которое я хочу игнорировать). Исключение:

FileNotFoundException пересекла собственную / управляемую границу

Я правильно ловлю FileNotFoundException и, как я уже сказал, это работает при запуске приложения, но не при отладке. Как я могу заставить отладчик понять, что я даю крысу задницу, если assembly.GetExportedTypes() бросает?

Обновление:

Я подумал, что обернул это, сняв флажок в Visual Studio 2010 под названием «Разрывать, когда исключения пересекают границы AppDomain или управляемые / собственные (только управляемые)» (в разделе «Отладка> Общие»), но проблема снова появилась , Я посыпал [DebuggerStepThrough], [DebuggerStepperBoundary] и [DebuggerNonUserCodeAttribute] на метод, о котором идет речь, без какого-либо эффекта.

1 Ответ

16 голосов
/ 23 июня 2010

В Visual Studio 2010 есть опция «Разрыв, когда исключения пересекают AppDomain или управляемые / собственные границы (только управляемые)» (в разделе «Отладка> Общие»), которые иногда не используются, если не проверены.Если это не так, мне нужно выйти из Visual Studio 2010, удалить все временные файлы и повторить попытку.Не очень элегантное решение, поэтому, если у кого-то есть идеи получше, пожалуйста, предоставьте их.

...