Подтвердить что ты не робот

Отладка всех событий в Visual Studio 2010 без установки точек останова

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

Есть ли способ уловить каждую строку кода, выполняемую приложением без установки точки прерывания?

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

4b9b3361

Ответ 1

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

  • Запустите приложение с помощью отладчика.
  • Перейдите в состояние непосредственно перед кликом.
  • Вернитесь к отладчику и нажмите "Приостановить", затем F11 (шаг вперед) - ничего не произойдет.
  • Перейдите в приложение и нажмите кнопку - отладчик должен взять на себя и перебросить в обработчик событий.

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

Ответ 2

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

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

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

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

Включение/выключение доступно через окно Breakpoints, которое находится в меню Debug > Windows > Breakpoints (CTRL + D, B). Вы также можете включить столбцы "Функция" и "Файл" в окне, что может помочь вам определить, какие точки останова находятся в обработчиках событий, которые вам интересны

Ответ 8

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

Ответ 9

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

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