VS2012/Blend 5: отладка исключения (только), возникающего в режиме конструктора

Я разрабатываю приложение в стиле Metro (для Windows 8) с использованием С# и XAML. Я настроил свои модели просмотра для использования в качестве контекстов данных во время разработки, например:

xmlns:vm="using:hub.ViewModels"
d:DataContext="{d:DesignInstance IsDesignTimeCreatable=True, Type=vm:ViewModels

Мое приложение работает отлично при запуске, но в представлениях дизайна как VS 2012, так и Blend я иногда получаю это (бесполезное) сообщение об ошибке:

An Exception was thrown. TargetException: Error in the application.
Stacktrace
at System.ComponentModel.PropertyChangedEventHandler.Invoke(Object sender, PropertyChangedEventArgs e)
InnerException: None

Это происходит только в режиме конструктора, то есть я не могу устанавливать точки останова для всех событий INotifyPropertyChanged().

Каков наилучший подход к отладке ошибок времени разработки?


person rikkit    schedule 31.07.2012    source источник


Ответы (3)


Если это происходит постоянно или полупоследовательно, вы можете подключить отладчик к конструктору XAML:

  1. Запустите Visual Studio; откройте свой проект и откройте файл XAML, в результате чего конструктор XAML загрузится

  2. Запустите второй экземпляр Visual Studio. Откройте свой проект, но убедитесь, что документы XAML не открыты.

  3. Убедитесь, что параметр «Только мой код» отключен. В меню Инструменты выберите Параметры. Выберите категорию Отладка. На странице Общие убедитесь, что флажок рядом с Включить только мой код не установлен.

  4. В меню Отладка выберите Исключения... и установите флажок Выброшено рядом с пунктом Исключения общеязыковой среды выполнения. . Это позволит при первой возможности обрабатывать все исключения CLR. Если вы знаете конкретный тип исключения, вы можете включить обработку первого шанса только для этого типа.

  5. В меню Отладка выберите Присоединить к процессу. В поле Присоединить к: нажмите Выбрать... и отметьте запись Управляемый (v4.5, v4.0) в списке. и нажмите ОК.

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

  6. В списке Доступные процессы найдите файл xdesproc.exe, соответствующий вашему проекту, и нажмите Присоединить.

    При наличии нескольких процессов (обычно из-за того, что у вас открыто несколько проектов или из-за того, что конструктор перезагружается или недавно перезагружался), может быть сложно определить, какой процесс конструктора принадлежит какому экземпляру Visual Studio. Часто проще всего просто присоединиться ко всем из них. Такой инструмент, как Process Explorer, может помочь вам определить, к какому процессу дизайнера относится какой экземпляр Visual Studio.

    Примечание. Не подключайте отладчик к процессу конструктора (xdesproc), принадлежащему тому же экземпляру Visual Studio, который вы используете для отладки: это может привести к зависанию Visual Studio. Вы всегда должны использовать два разных экземпляра Visual Studio.

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

person James McNellis    schedule 03.08.2012
comment
Я согласен с Джеймсом, и отличное прохождение. Вы также можете подключить Visual Studio к открытому экземпляру Blend. - person Jared Bienz - MSFT; 07.08.2012
comment
Спасибо за инструкции - выяснилось, что это исключение FileNotFoundException (не удалось загрузить файл или сборку '_ExpressionDynamicAssembly_aeacad22-4ac3-4f3b-a146-564d51a81c8a, версия = 0.0.0.0, культура = нейтральная, PublicKeyToken = null' или одна из ее зависимостей . Система не может найти указанный файл.). Я собираюсь предположить, что это ошибка с представлением дизайна - и посмотреть, исправлена ​​ли она в окончательной версии VS! - person rikkit; 08.08.2012
comment
@rikkit: Отлично, я рад, что помог. Если вы по-прежнему можете воспроизвести ошибку в Visual Studio 2012 RTM, откройте сообщение об ошибке в Microsoft Connect. - person James McNellis; 08.08.2012
comment
Обновление: я обновил свои инструменты до RTM. У меня все еще есть та же ошибка, но, к счастью, в представлении дизайна RTM теперь отображается полная трассировка стека - так что в конце концов это был мой код. Для всех, у кого есть похожая проблема, убедитесь, что вы не пытаетесь вызвать пользовательский интерфейс входа или окна сообщений в представлении дизайна, потому что этого просто не произойдет. :) - person rikkit; 23.08.2012

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

Убедитесь, что для переключателя «Включить/отключить код проекта» установлено значение «включено»… в VS/Blend 2015 это небольшой значок под редактором XAML как показано здесь.

Если он отключен, это может быть причиной того, что ваш экземпляр времени разработки не работает.

Кроме того, если он отключен и вы пытаетесь выполнить отладку с использованием второго экземпляра VS, то при подключении к XDesProc любые точки останова, установленные вами в коде программной части, сообщат, что они «в настоящее время не будут срабатывать. [потому что] символы не были загружен для этого документа». Вы можете подумать, что вам нужно как-то загрузить символы, но если вы откроете окно «Модули», пытаясь это сделать, вы даже не увидите свой модуль в списке.

Я потерял пару часов на эту проблему из-за того, что этот параметр отключен. Надеюсь, это поможет другим не сделать то же самое.

person Charlie Lotridge    schedule 22.06.2016

Я не уверен в этом, но полагаю, что вы можете проверить IsInDesignModeProperty Поле. Я помню, что иногда приходилось делать это на WinForms.

Также взгляните на эту ссылку Устранение неполадок загрузки конструктора WPF Сбои

person sebagomez    schedule 03.08.2012