Отладка всех событий в Visual Studio 2010 без установки точек останова - PullRequest
25 голосов
/ 20 октября 2010

Я пытаюсь отладить приложение Windows Form, которое имеет большое количество событий: нажатие кнопок, таймеры и т. Д.установить точку останова?

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

Ответы [ 9 ]

14 голосов
/ 20 октября 2010

Для отладки нажатия кнопки без установки точек останова:

  1. Запустите приложение с помощью отладчика.
  2. Доберитесь до состояния непосредственно перед намеченным кликом.
  3. Вернитесь к отладчику и нажмите Pause, затем F11 (Step Into) - ничего не произойдет.
  4. Зайдите в приложение и нажмите кнопку - отладчик должен взять на себя и перетащить вас в обработчик событий.

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

10 голосов
/ 20 октября 2010

Если вы используете Ultimate редакцию Visual Studio 2010, вы можете использовать ее новую функцию под названием IntelliTrace (ранее Historical Debugger).Это позволит вам делать именно то, что вы хотите - иметь возможность видеть все вызовы методов и события, произошедшие во время выполнения вашей программы, и вы сможете вернуться к нужному событию.

Чтобы включить IntelliTrace, перейдите на Tools → Options → IntelliTrace и установите флажок «Включить IntelliTrace» и выберите один из двух режимов: «только события» или «информация о событиях и вызовах», затем запустите приложение с помощью отладчика (F5).

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

Вы можете найти больше в этой серии статей и, конечно, в MSDN.

9 голосов
/ 20 октября 2010

Вы также можете попробовать инструмент покрытия кода.

Например, если у вас есть Resharper и dotCover , вы можете запустить свое приложение (через dotCover-> Обложка приложения ... пункт меню) и когда приложение завершится, dotCover покажет вам, какие строки кода были запущены в VS IDE, выделив их зеленым цветом.Строки кода, которые не запускаются, окрашены в красный цвет.

Я не знаю, есть ли другие инструменты, которые делают это, но это вариант.

2 голосов
/ 21 октября 2010

Я разработал инструмент Runtime Flow , чтобы точно решить эту проблему - понять большую незнакомую базу кода .NET с помощью мониторинга вызовов функций в реальном времени.Он похож на IntelliTrace, но больше внимания уделяет потоку управления, чем отладке.

1 голос
/ 20 октября 2010

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

Включение / отключение доступно через окно «Точки останова» в меню «Отладка> Windows> Точки останова» (CTRL + D, Б).Вы также можете включить в окно столбцы «Функция» и «Файл», которые могут помочь вам определить, какие точки останова находятся в обработчиках событий, которые вас интересуют

1 голос
/ 20 октября 2010

Вы не можете отследить строки кода, но вы можете использовать Trace.TraceInformation вызовы, когда вы хотите иметь представление о том, что выполняется.Там также Debug.Write.Оба вывода будут записываться в окне вывода Visual Studio.

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

1 голос
/ 20 октября 2010

Почему вы хотите разбить на каждую строку? Это было бы очень обременительно и отнимало много времени. Если вы хотите видеть активность вашей программы во время ее выполнения, используйте механизм ведения журнала или Debug.Writeline для вывода информации в окно Immediate.

0 голосов
/ 20 октября 2010

Nope 'не надо ничего - вам нужно установить каждую точку останова самостоятельно.

Если это поможет, F9 - это клавиша быстрого доступа для назначения точки останова - просто установите точку останова в начале каждого метода и используйте пошаговое выполнение (F10) / шаг в (F11) оттуда.

0 голосов
/ 20 октября 2010

Не совсем, но вы можете установить одну точку останова и одношаговую (F10 / F11) через остальную часть кода.

...