Как сделать шаг назад в отладчике visual studio

Добавил пользователь Morpheus
Обновлено: 10.09.2024

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

Начнем с самого простого, что бывает нужно начинающему программисту:
cw + 2 раза Tab = Console.WriteLine();

Далее материалы статьи с Хабра, где-то с моими дополнениями, но в основном в чистом виде:

Комментирование

Ctrl+K,C — закомментировать выбранные линии в коде.
Ctrl+K,U — раскомментировать выбранные линии в коде.

Если перед именем метода набрать /// — автоматически будут добавлены XML комментарии, которые потом можно использовать для создания документации. Туда можно вписать название метода, описание переменных и т.п. Далее при использовании данного метода будут всплывать подсказки как раз с этой информацией.

Поиск

Вызов базового джина

Навигация по коду

Если обратите внимание то студия, по своей природе MDI, значит должна быть возможность перемещаться, между окнами:
Ctrl+Tab — аналог Alt+Tab в Windows, только применимо к студии.

Очень удобным инструментом в студии являются закладки, да-да, по аналогии с книжными. Можно отметить код чтобы потом перейти к нему:
Ctrl+B, T — поставить/снять закладку.
Ctrl+B, Ctrl+C — удалить все закладки.
Ctrl+B, N — перейти к следующей закладке.
Ctrl+B, P — перейти к предыдущей закладке.

Форматирование и редактирование

Многие знают и используют Ctrl+C и Ctrl+V, но студия обладает ещё рядом удобным комбинаций:
Ctrl+Shift+V — не отпуская Ctrl+Shift и нажимая на V, вы сможете вставить один из 10 последних кусков текста, скопированных в буфер обмена.
Tab — увеличить отступ.
Shift+Tab — уменьшить отступ.

Мне иногда не хватало вертикального выделения текста, бывает полезно. Оказывается и такая возможность есть! Стоит нажать Alt, и не отпуская, выделять мышкой текст. Но есть минус — меню и стрелочки клавиатуры :). Это решаемо, нажимаете Shift+Alt и используете стрелочки Left или Right

Иногда в целях рефакторинга или ещё каких-то благих начинаниях, есть смысл перевести все буквы в верхний или нижний регистр:
Ctrl+Shift+U — перевести выделенный блок в верхний регистр
Ctrl+U — перевести выделенный блок в нижний регистр

Небольшой экскурс в сборку и отладку

Если появились ошибки, это плохо, но никто от них не застрахован:
F5 — запустить программу, с возможностью отладки. Или продолжить выполнение программы, после точки останова.
Ctrl+F5 — запустить программу без отладки
F9 — поставить/убрать точку останова — breakpoint
Ctrl+Shift+F9 — удалить все точки останова.
F10 — выполнить код, без захода внутрь
F11 — выполнить код, с заходом внутрь

В режиме отладки есть два типа просмотра — Watch и QuickWatch.
Вызвать QuickWatch вы можете нажав Ctrl+D, Q. Просто Watch — Ctrl+D, W.

можно ли сделать шаг назад через выполненный код в сеансе отладки?

например, я перешагиваю через метод под названием abc() ждать 12 но после повторной проверки возвращаемого значения я замечаю, что это 5 вместо 12 . Как я могу вернуться туда, где был раньше, и войти в метод, чтобы увидеть, что происходит? Я знаю, что вы можете сделать это в visual studio, но я не могу найти, как это сделать в intelliJ.

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

хотя, как упоминает Тиаго ниже, это не вернет глобальное состояние вашего приложения , что не является огромной проблемой, если вы разрабатываете службы без гражданства, но может быть, если вы разрабатываете приложения swing (если кто-то действительно делает это больше).

на панели инструментов отладчика, похоже, это: . в Idea 2016.3 и вверх значок выглядит так

полная документация доступна здесь: IntelliJ Debugger Docs, и Падение И StackOverflow Вопрос Кадров, с несколькими полезными ответами

Теги: Отладка, бряк, брейкпоинт, шаг с обходом, шаг с заходом, шаг с выходом, условные точки останова, отладка на visual studio, отладка на борланде, отладка на embarcadero, отладка на code gear, watchlist.

Отладка программы

Ч асто бывают ситуации, когда код скомпилировался, но работает не так, как предполагалось. Обнаружить ошибку просмотром кода не удалось и логгирование не особо помогает. Тогда можно воспользоваться дебаггером, пошагово пройти программу (благо, они у вас совсем небольшие), проследить состояние переменных и ход выполнения приложения или дизассемблировать код.

Пусть у нас имеется следующий код

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

Visual Studio

В ыполните ОТЛАДКА | Шаг с обходом, или нажмите F10. Вы получите примерно такую картину, как на рисунке. Жёлтая стрелка указывает, какой оператор будет выполнен. Используя шаг с обходом (F10), шаг с заходом (F11) и шаг с выходом (Shift + F11) можно исполнять программу.

Шаг с обходом выполняет оператор, но не заходит в него. Например, если это вызов функции, то он будет произведён, но внутрь функции мы не попадём.

Шаг с выходом позволяет вернуться на уровень выше, если мы совершили шаг с заходом.

Нажимая F10, дойдите до строки 23, где происходит вызов функции printArray. Если вы нажмёте F11, то перейдёт внутрь функции printArray.

Чтобы выйти из этой функции, можно нажать Shift + F11.

Когда выполнение программы доходит до оператора, рядом с которым стоит breakpoint, то происходит останов

После того, как точка останова выставлена, можно нажать F5. Программа будет выполняться до тех пор, пока не встретит точку останова. Это особенно удобно, когда нужно обойти ввод данных.

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

Пусть, например, мы хотим остановить выполнение программы тогда, когда значение локальной переменной i внутри цикла в функции стало равно 2. Для этого напишем соответствующее условие

Borland, Code Gear, Embarcadero etc.

В ыполните Run | Step over, или нажмите F8. Вы получите примерно такую картину, как на рисунке. Синяя стрелка указывает, какой оператор будет выполнен. Используя шаг с обходом (F8), шаг с заходом (F7) можно исполнять программу. Кроме этого, имеются дополнительные возможности, например исполнение кода до курсора (F4), исполнение до тех пор, пока не будет осуществлён возврат (Shift + F8), просматривать состояние переменных и выражений (Run | Inspect), изменять значение переменных (Ctrl + F7) и добавлять список отслеживаемых переменных и выражений (Ctrl + F5).

Шаг с обходом выполняет оператор, но не заходит в него. Например, если это вызов функции, то он будет произведён, но внутрь функции мы не попадём.

Шаг с выходом позволяет вернуться на уровень выше, если мы совершили шаг с заходом.

Нажимая F8, дойдите до строки 23, где происходит вызов функции printArray. Если вы нажмёте F7, то перейдёт внутрь функции printArray.

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

После того, как точка останова выставлена, можно нажать F9. Программа будет выполняться до тех пор, пока не встретит точку останова. Это особенно удобно, когда нужно обойти ввод данных.

Точка останова может быть иметь ряд условий, например, число попаданий, фильтры, действие, которое выполняется при остановке и т.д. Для того, чтобы задать дополнительные свойства, кликните правой кнопкой мыши на точке и в выпадающем меню выберете Breakpoint Properties….

Пусть, например, мы хотим остановить выполнение программы тогда, когда значение локальной переменной i внутри цикла в функции стало равно 2. Для этого напишем соответствующее условие в поле condition

Слева расположено окно Watchlist. Watchlist позволяет добавлять отслуживаемые переменные и выражения. Кликните два раза по полю и появится диалоговое окно. Пусть, например, мы хотим трассировать сумму переменных i и j. Запишем в watchlist сумму

email

Всё ещё не понятно? – пиши вопросы на ящик

У меня есть коллекция модульных тестов Boost, которые я хочу запустить как консольное приложение.

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

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

Я не хочу добавлять ' system ("pause"); ' или любые другие хаки как чтение персонажа в моей программе. Я просто хочу сделать паузу Visual Studio после запуска тестов с отладкой, как если бы я работал в режиме выпуска. Мне также хотелось бы, чтобы выходные данные тестов были захвачены в одном из выходных окон Visual Studio, но это также кажется сложнее, чем должно быть.

Как я могу это сделать?

Boost test предлагает следующее рекомендации по использованию Visual Studio это позволит вам автоматически запускать модульные тесты в конце компиляции и записывать выходные данные в окно сборки.

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

попробуйте запустить приложение с Ctrl + F5 комбинации.

http://connect.microsoft.com/VisualStudio/feedback/details/540969/missing-press-any-key-to-continue-when-lauching-with-ctrl-f5

в старых версиях он будет по умолчанию для консольной подсистемы, даже если вы выбрали "пустой проект", но не в 2010 году, поэтому вам нужно установить его вручную. Для этого выберите проект в обозревателе решений справа или слева (наверное уже выбран, поэтому вам не придется беспокоиться об этом). Затем выберите "проект" из списка строка меню выпадающие меню, затем выберите"имя_проекта свойства " > "свойства конфигурации" > "компоновщик" > " система "и установите первое свойство, раскрывающееся свойство" подсистема "в"консоль (/SUBSYSTEM:CONSOLE)". Окно консоли теперь должно оставаться открытым после выполнения, как обычно.

установите точку останова в последней строке кода.

Я только что скопировал из http://social.msdn.microsoft.com/forums/en-US/Vsexpressvc/thread/1555ce45-8313-4669-a31e-b95b5d28c787/?prof=required:

следующие работы для меня :-)

/////////////////////////////////////////////////////////////////////////////////////

вот еще одна причина, по которой консоль может исчезнуть. И решение:

с новой Visual Studio 2010 Вы можете увидеть это поведение даже при использовании Ctrl + F5 он же "запуск без отладки". Скорее всего, это связано с тем, что вы создали "пустой проект" вместо "консольного приложения Win32". Если вы создаете проект как "консольное приложение Win32" вы можете игнорировать это, пока это не касается.

в более старых версиях это будет по умолчанию для консольной подсистемы, даже если вы выбрали "пустой проект", но не в Visual Studio 2010, поэтому вам нужно установить его вручную. Для этого выберите проект в обозреватель решений справа или слева (вероятно, уже выбран, поэтому вам не нужно беспокоиться об этом).

затем выберите " проект "из выпадающего меню Меню, затем выберите"имя_проекта свойства " -> "свойства конфигурации" -> "компоновщик" -> " система "и установите первое свойство, раскрывающееся свойство" подсистема "на"консоль (/SUBSYSTEM:CONSOLE)". В окне консоли должен оставаться открытым после выполнения обычный.

/////////////////////////////////////////////////////////////////////////////////////

Если это консольное приложение, используйте Ctrl + F5 .

вы говорите, что не хотите использовать system("pause") рубить. Почему бы и нет?

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

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

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

Примечание: реализация программы system() в Microsoft Visual Studio требует, чтобы переменная среды COMSPEC идентифицировала интерпретатор командной строки. Если эта переменная среды будет испорчена - например, если у вас возникла проблема в Visual Studio отладочные свойства проекта, чтобы переменные среды не передавались должным образом при запуске программы-тогда он просто не будет работать молча.

Я бы использовал команду"wait" -в течение определенного времени (миллисекунд) по вашему собственному выбору. Приложение выполняется до строки, которую вы хотите проверить, а затем продолжается после истечения времени.

включить :

вы также можете настроить свой исполняемый файл как внешний инструмент и пометить инструмент для использовать окне вывода. Таким образом, вывод инструмента будет виден в самой Visual Studio, а не в отдельном окне.

Я запускаю приложение с F11 и получаю точку останова где-то в unit_test_main.ИПП (может быть ассемблерный код). Я использую shift-f11 (Step out) для запуска модульного теста и получения следующей инструкции по сборке в CRT (обычно в mainCRTStartup()). Я использую F9, чтобы установить точку останова на инструкции.

при следующем вызове я могу запустить приложение с помощью F5, и приложение сломается после запуска тестов, поэтому у меня есть возможность заглянуть в окно консоли

просто используйте библиотеку журналов, например log4net, и пусть она войдет в приложение для файлов.

сделайте readline в конце (это "forma cochina", как мы говорим в Колумбии, но это работает):

Читайте также: