Отладка всех событий в Visual Studio 2010 без установки точек останова
Я пытаюсь отлаживать приложение формы Windows, которое имеет большое количество событий: нажатия кнопок, таймеры и т.д.
Есть ли способ уловить каждую строку кода, выполняемую приложением без установки точки прерывания?
изменить:
Программа не была написана мной, поэтому я не знаком с кодом. Я хочу пройти через всю программу, поймав каждую строку исполняемого кода. Установка точек останова в каждом случае непрактична, так как различные элементы управления создаются динамически.
Ответы
Ответ 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).