Как отладить ошибки синтаксического анализа XAML в Silverlight? - PullRequest
9 голосов
/ 05 марта 2010

Я периодически сталкиваюсь со следующей проблемой: я делаю изменения в XAML или некоторых используемых им ресурсах, и когда я загружаю проект Silverlight в режиме отладки, он достигает только вращающейся анимации загрузки Silverlight.

Я пытался подключить отладчик VS08 к процессу, но на данный момент он ничего не делает (работает нормально, когда я в Silverlight, но не раньше).

Из предыдущего опыта я заметил, что это происходит, когда есть проблемы с XAML или ресурсами в нем, но мое единственное решение до сих пор заключалось в построчном разборе кода, пока я не обнаружу проблему.

Есть ли простой способ отладки / диагностики этих ситуаций?

UPDATE

Я нашел этот вопрос с некоторой помощью, но он все еще не обеспечивает хороший способ устранения проблем такого типа.

Ответы [ 4 ]

5 голосов
/ 09 марта 2010

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

Я обнаружил, что IE реагирует на исключения, передаваемые из Silverlight в DOM, но вы не получаете такой же обратной связи в браузере Chrome (который я использую). Решение, которое на самом деле очень помогает (даже больше, чем совет IE) - изменить метод ReportErrorToDOM () в App.xaml.cs следующим образом:

private void ReportErrorToDOM(ApplicationUnhandledExceptionEventArgs e)
{
    string errorMsg = String.Empty;
    try
    {
        errorMsg = e.ExceptionObject.Message + e.ExceptionObject.StackTrace;
        errorMsg = errorMsg.Replace('"', '\'').Replace("\r\n", @"\n");

        System.Windows.Browser.HtmlPage.Window.Eval("throw new Error(\"Unhandled Error in Silverlight Application " + errorMsg + "\");");
    }
    catch (Exception)
    {
#if DEBUG
        MessageBox.Show(errorMsg);
#endif
    }
}

Это дает вам позицию в XAML, с которой начинается проблема. Это не идеальный отладчик, но он помогает.

3 голосов
/ 13 мая 2010

Это не окончательный ответ, но часто может помочь

В Visual Studio:

  • Нажмите Отладка> Исключения
  • Нажмите «Найти» и найдите XAML
  • Нажмите кнопку «Брошенный» рядом с System.Windows.Markup.XamlParseException

Запустите ваш проект в режиме отладки. Любые исключения Xaml будут показаны немедленно. Для получения дополнительной информации иногда проверяйте внутреннее исключение.

Я потратил так много времени, прежде чем наконец понял это!

1 голос
/ 07 марта 2010

Это может не применяться, но один частый источник ошибок XAML связан с необработанными исключениями в конвертерах, которые вы используете в качестве ресурсов. Люди часто забывают использовать блок try-catch в своих конвертерах, и когда там что-то взрывается, вам приходится разбирать ваш код построчно.

И, возьмите это с собой, но в зависимости от ситуации вы можете скопировать и вставить часть вашего XAML в проект WPF и получить более качественные сообщения об ошибках. Я никогда не полагался на эту тактику сам, но недавно я услышал об этом от опытного разработчика WPF / SL, который намного умнее меня, так что, возможно, стоит попробовать. : -)

0 голосов
/ 11 апреля 2010

Для Microsoft: конечный пользователь в настоящее время не может отлаживать анализатор XAML, это может сделать только MS.Новая версия Silverlight 4 XAML Parser была полностью переписана с использованием управляемого кода, и, надеюсь, они дадут нам лучший способ отладки.Я знаю это, поскольку у меня только что возникла проблема, я открыл службу поддержки и был проинформирован об этом разработчиком Silverlight.

Пользователь, которого я когда-либо мог увидеть, что происходит с анализатором, использовал Silverlight Spy:

http://firstfloorsoftware.com/silverlightspy/download-silverlight-spy/

Отличный инструмент.

...