Хороший способ отладки ошибок конструктора Visual Studio

Есть ли хороший способ отладки ошибок в Visual Studio Designer?

В нашем проекте у нас есть тонны UserControls и многих сложных форм. Для сложных, Дизайнер часто бросает различные исключения, которые не очень помогают, и мне было интересно, есть ли хороший способ выяснить, что пошло не так.

Язык С#, и мы используем Visual Studio 2005.

Ответ 2

Мне удалось отладить некоторые проблемы конструктора элементов управления, запустив второй экземпляр VS, а затем из вашего первого экземпляра VS выполните команду "Отладка → Прикрепить к процессу" и выберите "devenv".

Первый экземпляр VS - это место, где вы будете устанавливать точки останова. Используйте второй экземпляр для загрузки конструктора, чтобы запустить код "designer".

Ответ 3

Это было болью в 2005 году и до сих пор в 2015 году. Точки останова часто не попадают, вероятно, из-за того, что сборники были теневыми копиями или что-то от дизайнера (?). Лучшее, что вы можете сделать, это разбить вручную, введя вызов Debugger.Break(). Вы можете заключить его в компилятор как условный:

#if DEBUG
   System.Diagnostics.Debugger.Break(); 
#endif
int line_to = break; // <- if a simple breakpoint here does not suffice

Ответ 4

У меня это случалось много раз, и это настоящая боль.

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

Если это не сработает, попробуйте выполнить компиляцию и определить исключение. Вы действительно летели слепым, что является проблемой. Затем вы можете попробовать просто запустить код и посмотреть, какое исключение возникает при его запуске, что должно дать вам дополнительную информацию.

Подход с последним вздохом может состоять в том, чтобы удалить весь незагенерированный код из формы и постепенно повторно ввести его для определения ошибки.

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

В принципе, насколько я могу судить, нет никакой реальной проблемы вокруг проблемы, кроме как немного ее вырезать!

Ответ 5

Я обнаружил, почему иногда точки останова не попадают. В диалоговом окне "Прикрепить к процессу" тип "Прикрепить к:" должен быть "Выбрать..." "d.

Как только я перешел на "Управляемый 4.0, 4.5", были удалены точки останова для приложения WinRT. Источник: Отладка дизайнера в WinRT.

Ответ 6

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

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

Ответ 7

Вы можете запустить второй экземпляр VS и присоединить его к первому экземпляру VS (Ctrl + Alt + P). В первом случае установите точки останова, во втором случае запустите конструктор, и точка останова будет срабатывать. Вы можете выполнить код, но Edit-and-Continue не будет работать.

Для редактирования и продолжения работы установите параметры управления библиотекой для запуска VS с аргументом командной строки, являющимся именем файла решения. Затем вы можете просто установить точки останова и нажать F5. Он будет отлаживаться так же, как и код пользователя! В качестве дополнительной заметки вы можете сделать это и надстройками VS и Office.