Хороший способ отладки ошибок Visual Studio Designer - PullRequest
37 голосов
/ 02 сентября 2008

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

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

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

Ответы [ 7 ]

38 голосов
/ 02 сентября 2008

Я смог отладить некоторые проблемы конструктора элементов управления, запустив второй экземпляр VS, затем из вашего первого экземпляра VS сделал «Debug -> Attach to Process» и выбрал «devenv».

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

7 голосов
/ 04 декабря 2008
2 голосов
/ 13 июля 2016

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

#if DEBUG
   System.Diagnostics.Debugger.Break(); 
#endif
int line_to = break; // <- if a simple breakpoint here does not suffice
1 голос
/ 29 апреля 2014

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

Как только я переключился на «Managed 4.0, 4.5», были достигнуты точки останова для приложения WinRT . Источник: Дизайнерская отладка в WinRT .

1 голос
/ 02 сентября 2008

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

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

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

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

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

В сущности, насколько я могу судить, нет другого способа обойти эту проблему, кроме как немного ее решить!

0 голосов
/ 16 мая 2010

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

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

0 голосов
/ 02 сентября 2008

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

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