Как повредиться на необработанных исключениях в Silverlight

В консоли приложения .NET отладчик повреждается при броске (прежде чем раскручивание стека) для исключений без соответствия блоку выгоды. Кажется, что Silverlight выполняет весь пользовательский код в выгоде попытки, таким образом, отладчик никогда не повреждается. Вместо этого Приложение. UnhandledException повышен, но после ловли исключения и раскручивания стека. Для повреждения, когда необработанные исключения брошены и не пойманы я должен включить первые случайные повреждения исключения, который также останавливает программу для обработанных исключений.

Существует ли способ удалить блок попытки Silverlight, так, чтобы исключения добрались непосредственно до отладчика?

11
задан Bruno Martinez 11 May 2010 в 21:12
поделиться

6 ответов

Убедитесь, что в вашем веб-проекте установлен флажок отладки приложений Silverlight. Вы найдете этот параметр на вкладке «Свойства» веб-приложения -> «Интернет».

В VS2008 нажмите Ctrl + Alt + E, чтобы открыть окно «Исключения», установите флажок в столбце «Выброшенные» для «Исключений среды CLR». Я не верю, что в VS2010 этот ярлык работает, поэтому вам нужно перейти в Debug-> Exceptions из раскрывающегося меню.

Я не уверен, что это именно то, что вы ищете, но, надеюсь, это поможет!

5
ответ дан 3 December 2019 в 06:20
поделиться

На самом деле это довольно просто.

Используя событие 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.
        }
    }
}
9
ответ дан 3 December 2019 в 06:20
поделиться

Я использую метод CTRL + ALT + E (Отладка> Исключения), чтобы заставить отладчик останавливаться при запуске, но я делаю это по мере необходимости и с той целью, как я жестяная банка.

Если я пытаюсь отследить исключение, я буду искать его тип в окне вывода [Debug] после того, как приложение выйдет из строя в первый раз. Затем я включу «прерывание при возникновении» для этого типа исключения только с помощью кнопки «Найти» в правой части диалогового окна.

Он не идеален, но он настолько отфильтрован, насколько я его понял.

1
ответ дан 3 December 2019 в 06:20
поделиться

Включение отладки «Только мой код» близко к тому поведению, которое я хочу. См.

http://forums.silverlight.net/forums/p/20678/72192.aspx

и

https://connect.microsoft.com/VisualStudio/feedback/details/356687/visual- studio-breaks-on-unhandled-exceptions-неправильно-in-silverlight # tabs

0
ответ дан 3 December 2019 в 06:20
поделиться

Причиной неполадок является метод 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 для принудительной остановки отладчика при возникновении исключения. Сохраняйте исключения для действительно исключительных.

4
ответ дан 3 December 2019 в 06:20
поделиться

Не каждый браузер поддерживает отладку Silverlight.

Например, я не смог отладить его ни в Firefox, ни в Chrome, он корректно работал только в IE. :(

Если это не ваша проблема, просто проигнорируйте этот ответ.

0
ответ дан 3 December 2019 в 06:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: