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

есть ли хороший способ отладки ошибок в конструкторе Visual Studio?

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

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

7 ответов



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

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


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

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

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

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

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

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

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

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


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

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


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

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

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

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