Как отладить ошибки анализа XAML в Silverlight?

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

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

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

Существует ли простой способ отладить/диагностировать эти ситуации?

ОБНОВЛЕНИЕ

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

9
задан Community 23 May 2017 в 11:33
поделиться

4 ответа

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

Я обнаружил, что 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, где возникает проблема. Это не идеальный отладчик, но он помогает.

5
ответ дан 4 December 2019 в 21:49
поделиться

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

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

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

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

0
ответ дан 4 December 2019 в 21:49
поделиться

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

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

.
1
ответ дан 4 December 2019 в 21:49
поделиться

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

В Visual Studio:

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

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

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

3
ответ дан 4 December 2019 в 21:49
поделиться
Другие вопросы по тегам:

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