В консоли приложения .NET отладчик повреждается при броске (прежде чем раскручивание стека) для исключений без соответствия блоку выгоды. Кажется, что Silverlight выполняет весь пользовательский код в выгоде попытки, таким образом, отладчик никогда не повреждается. Вместо этого Приложение. UnhandledException повышен, но после ловли исключения и раскручивания стека. Для повреждения, когда необработанные исключения брошены и не пойманы я должен включить первые случайные повреждения исключения, который также останавливает программу для обработанных исключений.
Существует ли способ удалить блок попытки Silverlight, так, чтобы исключения добрались непосредственно до отладчика?
Убедитесь, что в вашем веб-проекте установлен флажок отладки приложений Silverlight. Вы найдете этот параметр на вкладке «Свойства» веб-приложения -> «Интернет».
В VS2008 нажмите Ctrl + Alt + E, чтобы открыть окно «Исключения», установите флажок в столбце «Выброшенные» для «Исключений среды CLR». Я не верю, что в VS2010 этот ярлык работает, поэтому вам нужно перейти в Debug-> Exceptions из раскрывающегося меню.
Я не уверен, что это именно то, что вы ищете, но, надеюсь, это поможет!
На самом деле это довольно просто.
Используя событие Application_UnhandledException , вы можете программно ввести точку останова .
using System.IO; // FileNotFoundException
using System.Windows; // Application, StartupEventArgs, ApplicationUnhandledExceptionEventArgs
namespace SilverlightApplication
{
public partial class App : Application
{
public App()
{
this.Startup += this.Application_Startup;
this.UnhandledException += this.Application_UnhandledException;
InitializeComponent();
}
private void Application_Startup(object sender, StartupEventArgs e)
{
this.RootVisual = new Page();
}
private void Application_UnhandledException(object sender,
ApplicationUnhandledExceptionEventArgs e)
{
if (System.Diagnostics.Debugger.IsAttached)
{
// Break in the debugger
System.Diagnostics.Debugger.Break();
// Recover from the error
e.Handled = true;
return;
}
// Allow the Silverlight plug-in to detect and process the exception.
}
}
}
Я использую метод CTRL + ALT + E (Отладка> Исключения), чтобы заставить отладчик останавливаться при запуске, но я делаю это по мере необходимости и с той целью, как я жестяная банка.
Если я пытаюсь отследить исключение, я буду искать его тип в окне вывода [Debug] после того, как приложение выйдет из строя в первый раз. Затем я включу «прерывание при возникновении» для этого типа исключения только с помощью кнопки «Найти» в правой части диалогового окна.
Он не идеален, но он настолько отфильтрован, насколько я его понял.
Включение отладки «Только мой код» близко к тому поведению, которое я хочу. См.
http://forums.silverlight.net/forums/p/20678/72192.aspx
и
Причиной неполадок является метод DispatcherOperation.Invoke (). Это выглядит так:
internal void Invoke()
{
try
{
this._operation.DynamicInvoke(this._args);
}
catch (Exception exception)
{
Error.GetXresultForUserException(exception);
}
}
Предложение «поймать все» предотвращает вмешательство отладчика. В Silverlight отсутствует нечто похожее на метод Windows Forms Application.SetUnhandledExceptionMode () . И нет проверки, запущен ли отладчик, что делает Winforms.
Мне не кажется, что это сложно добавить, я бы порекомендовал вам опубликовать запрос функции на connect.microsoft.com
Между тем, нет другой доступной опции, кроме Debug + Exceptions, установите флажок Thrown для принудительной остановки отладчика при возникновении исключения. Сохраняйте исключения для действительно исключительных.
Не каждый браузер поддерживает отладку Silverlight.
Например, я не смог отладить его ни в Firefox, ни в Chrome, он корректно работал только в IE. :(
Если это не ваша проблема, просто проигнорируйте этот ответ.