Как запустить программу под отладчиком

Не претендуя на полноту описания, приведем описание основ­ных функций и возможностей отладчика TD.

Как запустить программу под отладчиком

Запуск программы под отладчиком выполняется путем набора командной строки

Например,

td primer.exe

Что умеет и чего не умеет отладчик td

  • трассировка (пошаговое выполнение) – можно выполнять про­грамму по одному оператору, пропуская (или не пропуская) при этом вызовы процедур и функций;
  • точки останова – выполнить программу до указанной в про­грамме точке;
  • просмотр – можно создать окна для показа самых различных вещей – значений и адресов переменных, точек останова, содержимого стека, регистров процессора и т.п.;
  • изменение – можно изменить содержимое переменных;
  • прослеживание – можно выделить некоторые переменные и отслеживать изменение их значений в процессе работы программы.
  • не имеет встроенного редактора текстов для изменения исход­ного текста программы. Однако позволяет вызвать любой текстовый редактор;
  • не может перекомпилировать вашу программу. Для этого вам нужен компилятор или ассемблер (например, TASM);
  • и самое главное, отладчик не сможет заменить процесс обду­мывания. Турбоотладчик является мощным средством, но при отсутствии мыслей он не экономит ни время, ни усилия.

Меню View Окно Module

В окне Module (Модуль) на экран выводится текст отлаживае­мой программы. Вы можете перемещаться по тексту, выполнять строки программы и просматривать данные и код.

Простейший пример использования отладчика в Visual Studio (C#)

Окно cpu

  • дамп памяти (как правило, сегмент данных);
  • содержимое стека;
  • содержимое регистров ЦП;
  • машинные инструкции;
  • содержимое флагов ЦП.

Окно Watches

  • Watch (Просмотр) выводит подсказку для ввода имени перемен­ной или выражения, чтобы добавить его к списку окна Watches (оно добавляется в конец списка);
  • Edit (Редактирование) позволяет редактировать выражение в окне Watches. Вы можете изменять то, что там находится или вводить новое значение;
  • Remove (Удаление) удаляет из окна Watches текущую выбранную запись;
  • Delete All (Удалить все) удаляет из окна Watches все записи;
  • Inspect (Проверка) открывает окно проверки (окно Inspector), в котором выводится содержимое подсвеченной в данный момент в окне Watches записи;
  • Change (Изменение) изменяет значение подсвеченной в данный момент записи в окне Watches на значение, которое вы вводите в ответ на подсказку.

Окно Dump

  • Goto (Переход) – выводит на экран данные по новому адресу;
  • Change (Изменение) – изменяет байты данных по адресу курсора;
  • DisplayAs (Режим вывода) – задает режим вывода дампа: байтами, словами и т.п.

Источник: studfile.net

Записки программиста

Ранее в заметке Основы использования отладчика WinDbg мы узнали, как можно отлаживать приложения под Windows. Теперь настало время познакомиться с отладчиком gdb, который позволяет делать все то же самое под Linux и другими *nix системами. Благодаря этой заметке вы узнаете, как при помощи gdb ставить брейкпоинты и смотреть значения локальных переменных, анализировать coredump’ы и вот это все.

Язык c++ с нуля | #41 Отладка программы в visual studio.

Для комфортной отладки сначала нужно собрать программу с правильными флагами. Во-первых, необходимо указать флаг -g . Иначе программа будет собрана без отладочных символов и отлаживать ее придется в ассемблерном коде (что, впрочем, вполне выполнимо для программ, написанных на чистом Си). Во-вторых, рекомендуется отключить оптимизации при помощи флага -O0 , иначе некоторые переменные окажутся, что называется, optimized out, и вы не сможете посмотреть их значения при отладке.

Другими словами, при прочих равных программу лучше собирать как-то так:

gcc -O0 -g test.c -o test

Запускаем программу в отладчике:

gdb . / test

При необходимости передать программе какие-то аргументы можно так:

gdb —args . / test —ololo —trololo

Запуск с так называемом Text User Interface, интерфейсом на основе curses (мне лично он не нравится):

gdb -tui . / test

Еще можно прицепиться к уже работающему процессу по его id:

gdb -p 12345

Для анализа корок используем команду вроде такой:

gdb / path / to / prog / tmp / core_prog.1234

Чтобы корки вообще писались, систему нужно правильно настроить:

ulimit -c unlimited
sudo sysctl -w kernel.core_pattern= ‘/tmp/core_%e.%p’

Плюс в /etc/security/limits.conf пишем что-то вроде:

# где eax — имя вашего пользователя в системе
eax soft core 50000
eax hard core 500000

… а в /etc/sysctl.conf:

kernel.core_pattern = /tmp/core_%e.%p

Кстати, корки можно создавать «вручную» прямо из gdb при помощи команды:

Читайте также:
Бот чтобы сам запускал программы

generate-core-file

Для удаленной отладки на сервере выполняем команды:

sudo apt-get install gdbserver
gdbserver : 3003 myprog

На клиенте говорим откуда брать отладочные символы:

gdb -q myprog
target remote 10.110.0.10:3003

Заметьте, что в Ubuntu при попытке прицепиться к своим процессам без sudo вы можете получить ошибку вроде такой:

Could not attach to process. If your uid matches the uid of the target
process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or
try again as the root user.

For more details, see /etc/sysctl.d/10-ptrace.conf

ptrace: Operation not permitted.

Для решения этой проблемы говорим:

sudo sh -c ‘echo 0 > /proc/sys/kernel/yama/ptrace_scope’

… а также правим /etc/sysctl.d/10-ptrace.conf:

kernel.yama.ptrace_scope = 0

Итак, тем или иным образом мы прицепились отладчиком куда надо. Теперь нам доступны следующие команды.

Для выполнения команды в gdb можно вводить либо всю команду целиком, либо только первые несколько букв. То есть, h , he и help или r , ru и run — это все одни и те же команды. Здесь я преимущественно буду использовать короткие версии, так как это то, что вы скорее всего будете использовать на практике. К тому же, соответствующие длинные версии обычно очевидны.

Начать выполнение программы, если она еще не выполняется:

Продолжить выполнение программы:

Прервать выполнение в любой момент можно нажатием Ctr+C.

Отцепиться от программы, оставшись при этом в отладчике:

Выйти из отладчика (если цеплялись через -p , процесс продолжит работу):

Просмотр исходного кода программы:

l
l номер_строки
l откуда,докуда

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

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

disassemble

Step — шаг вперед или несколько шагов вперед:

Next — как step, только без захода внутрь других методов и процедур:

Until — выполнить программу до указанной строчки:

Продолжить выполнение до возвращения из текущей процедуры:

backtrace
bt

Перемещение между фреймами стака:

Информация о текущем фрейме:

info frame

Показать аргументы в текущем фрейме:

Показать локальные переменные в текущем фрейме:

Источник: eax.me

Учебник. Сведения об отладке кода C++ с помощью Visual Studio

Область применения:yesVisual StudionoVisual Studio для Mac noVisual Studio Code

В этом пошаговом руководстве рассматриваются возможности отладчика Visual Studio. Более полное описание функций отладчика см. в статье c Знакомство с отладчиком Visual Studio. Отладка приложения обычно означает запуск и выполнение приложения с подключенным отладчиком. При этом в отладчике доступно множество способов наблюдения за выполнением кода. Вы можете пошагово перемещаться по коду и просматривать значения, хранящиеся в переменных, задавать контрольные значения для переменных, чтобы отслеживать изменение значений, изучать путь выполнения кода, просматривать выполнение ветви кода и т. д. Если вы не знакомы с процессом отладки, перед выполнением задач в этой статье рекомендуется прочесть документ об отладке для начинающих.

Несмотря на то, что демонстрационное приложение написано на C++, большинство функций применимы к C#, Visual Basic, F#, Python, JavaScript и другим языкам, поддерживаемым Visual Studio (F# не поддерживает возможность «Изменить и продолжить». F# и JavaScript не поддерживают окно Видимые). Снимки экрана приведены для C++.

В этом руководстве рассмотрены следующие задачи:

  • Запуск отладчика и попадание в точки останова.
  • Использование команд для пошагового выполнения кода в отладчике.
  • Проверка переменных в подсказках к данным и окнах отладчика.
  • Просмотр стека вызовов

Предварительные требования

У вас должна быть установлена среда Visual Studio и рабочая нагрузка Разработка классических приложений на C++ .

Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio, если еще не сделали этого.

Установите Visual Studio 2022 бесплатно со страницы скачиваемых материалов Visual Studio 2022, если еще не сделали этого.

Если вам нужно установить рабочую нагрузку, но вы уже используете Visual Studio, выберите пункт Средства>Получить средства и компоненты. , после чего запустится Visual Studio Installer. Запускается Visual Studio Installer. Выберите рабочую нагрузку Разработка классических приложений на C++ , а затем нажмите Изменить.

Создание проекта

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

  1. Запустите Visual Studio. Если окно запуска не открыто, выберите Файл>Окно запуска.
  2. На начальном экране выберите Создать проект.
  3. В поле поиска окна Создание проекта введите консоль. Затем выберите C++ в списке языков и Windows в списке платформ. Применив фильтры языка и платформы, выберите шаблон Консольное приложение и нажмите кнопку Далее.

Снимок экрана: выбор шаблона C++ для консольного приложения.

Снимок экрана: выбор шаблона C++ для консольного приложения.

Примечание Если шаблон Консольное приложение отсутствует, его можно установить из окна Создание проекта. В сообщении Не нашли то, что искали? выберите ссылку Установка других средств и компонентов. После этого в Visual Studio Installer выберите рабочую нагрузку Разработка классических приложений на C++ .

Читайте также:
Название детской игровой программы на 1 мая

Создание приложения

  1. Откройте файл get-started-debugging.cpp и замените все его содержимое по умолчанию следующим кодом:

#include #include #include void SendMessage(const std::wstring std::wcout int main() < std::vectorletters = < L’f’, L’r’, L’e’, L’d’, L’ ‘, L’s’, L’m’, L’i’, L’t’, L’h’ >; std::wstring name = L»»; std::vector a(10); std::wstring key = L»»; for (int i = 0; i < letters.size(); i++) < name += letters[i]; a[i] = i + 1; SendMessage(name, a[i]); >std::wcin >> key; return 0; >

Запуск отладчика

Начать отладку

  1. Нажмите клавишу F5 (Отладка > Начать отладку) или кнопку Начать отладкуна панели инструментов отладки. При нажатии клавиши F5 происходит запуск приложения с присоединенным отладчиком. Но пока мы не сделали ничего особенного, чтобы проанализировать код. Поэтому приложение будет просто загружено, и вы увидите выходные данные консоли.

Hello, f! Count to 1 Hello, fr! Count to 2 Hello, fre! Count to 3 Hello, fred! Count to 4 Hello, fred ! Count to 5 Hello, fred s! Count to 6 Hello, fred sm! Count to 7 Hello, fred smi! Count to 8 Hello, fred smit! Count to 9 Hello, fred smith!

Count to 10

Остановить отладку

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

  • Остановите отладчик, нажав красную кнопку остановки или клавиши SHIFT + F5.
  • В окне консоли нажмите клавишу ВВОД, чтобы закрыть его.
  • Установка точки останова и запуск отладчика

    1. В цикле for функции main установите точку останова, щелкнув левое поле следующей строки кода: name += letters[i]; В месте установки точки останова появится красный круг Точка останова. Точки останова — это один из самых простых и важных компонентов надежной отладки. Точка останова указывает, где Visual Studio следует приостановить выполнение кода, чтобы вы могли проверить значения переменных или поведение памяти либо выполнение ветви кода.
    2. Нажмите клавишу F5 или кнопку Начать отладкуНачать отладку. Откроется приложение, и отладчик перейдет к строке кода, где задана точка останова. Снимок экрана: установка точки останова и попадание в нее.Желтая стрелка представляет оператор, на котором приостановлен отладчик. В этой же точке приостанавливается выполнение приложения (этот оператор пока не выполнен). Если приложение еще не запущено, клавиша F5 запускает отладчик и останавливается в первой точке останова. В противном случае F5 продолжает выполнение приложения до следующей точки останова. Точки останова полезны, если вам известны строка или раздел кода, которые вы хотите подробно изучить. Дополнительные сведения о различных типах точек останова, которые можно задать, например об условных точках останова, см. в разделе Использование точек останова.

    Переход по коду в отладчике с помощью пошаговых команд

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

    1. Во время приостановки в цикле for в методе main дважды нажмите клавишу F11 (или выберите Отладка > Шаг с заходом), чтобы перейти к вызову метода SendMessage . После двойного нажатия клавиши F11 вы должны находиться на следующей строке кода: SendMessage(name, a[i]);
    2. Еще раз нажмите клавишу F11, чтобы выполнить шаг с заходом в метод SendMessage . Желтый указатель перемещается в метод SendMessage . Снимок экрана: нажатие клавиши F11, чтобы выполнить шаг с заходом.F11 — это команда Шаг с заходом, которая выполняет приложение с переходом к следующему оператору. Клавишу F11 удобно использовать для более детальной проверки потока выполнения. (Мы также покажем другие варианты более быстрого перемещения по коду.) По умолчанию отладчик пропускает непользовательский код (дополнительные сведения см. в статье об отладке в режиме «Только мой код»). Предположим, что вы закончили изучать метод SendMessage и хотите выйти из него, но остаться в отладчике. Это можно сделать с помощью команды Шаг с выходом.
    3. Нажмите клавиши SHIFT + F11 (или выберите Отладка > Шаг с выходом). Эта команда возобновляет выполнение приложения (и работу отладчика) до возврата данных текущим методом или текущей функции. Вы должны вернуться в цикл for в методе main , приостановленный на вызове метода SendMessage .
    4. Нажмите клавишу F11 несколько раз, пока не вернетесь к вызову метода SendMessage .
    5. Во время приостановки на вызове метода один раз нажмите клавишу F10 (или выберите Отладка > Шаг с обходом). Снимок экрана: нажатие клавиши F10, чтобы выполнить шаг с обходом.Обратите внимание, что в этот раз отладчик не заходит в метод SendMessage . Клавиша F10 перемещает отладчик без захода в функции или методы в коде приложения (код продолжает выполняться). Нажав клавишу F10 (а не F11) в вызове метода SendMessage , мы пропускаем код реализации для SendMessage (пока это нас не интересует). Дополнительные сведения о различных способах перемещения по коду см. в разделе Навигация по коду в отладчике.

    Переход по коду с помощью команды «Выполнение до щелкнутого»

    1. Нажмите клавишу F5, чтобы перейти к точке останова.
    2. В редакторе кода прокрутите код вниз и наведите указатель мыши на функцию std::wcout в методе SendMessage , чтобы в левой части появилась зеленая кнопка Выполнение до щелкнутогоВыполнение до щелкнутого. В подсказке для кнопки выводится «Выполнить до этого места». Снимок экрана: использование функции
    Читайте также:
    Лучшие программы для аниме эдитов

    Примечание Кнопка Выполнение до щелкнутого впервые появилась в Visual Studio 2017. (Если кнопка с зеленой стрелкой отсутствует, воспользуйтесь клавишей F11, чтобы переместить отладчик в нужное место.)

    Выполнение до щелкнутого

  • Нажмите кнопку Выполнение до щелкнутого. Отладчик перемещается к функции std::wcout . Использование этой кнопки аналогично установке временной точки останова. Функция Выполнение до щелкнутого удобна для быстрой работы в видимой области кода приложения (можно щелкнуть в любом открытом файле).
  • Быстрый перезапуск приложения

    Перезапустить приложение

    Нажмите кнопку Перезапустить на панели инструментов отладки (CTRL + SHIFT + F5).

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

    Отладчик еще раз останавливается в точке останова, ранее заданной вами в цикле for .

    Проверка переменных с помощью подсказок по данным

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

    Снимок экрана: просмотр подсказки к данным.

    1. При приостановке на операторе name += letters[i] наведите указатель мыши на переменную letters и увидите ее значение по умолчанию — size= .
    2. Разверните переменную letters , чтобы просмотреть ее свойства, включая все элементы, которые она содержит.
    3. Затем наведите указатель мыши на переменную name , чтобы просмотреть ее текущее значение — пустую строку.
    4. Несколько раз нажмите клавишу F5 (или выберите Отладка>Продолжить), чтобы выполнить несколько итераций по циклу for , каждый раз снова приостанавливая выполнение в точке останова и наводя указатель мыши на переменную name , чтобы просмотреть ее значение. Значение переменной изменяется при каждой итерации цикла for — f , затем fr , fre и т. д. Часто при отладке требуется быстро проверить значения свойств в переменных, чтобы убедиться, что в них хранятся ожидаемые значения. Советы по данным — отличный способ это сделать.

    Проверка переменных с помощью окон «Видимые» и «Локальные»

    1. Взгляните на окно Видимые в нижней части редактора кода. Если оно закрыто, откройте его во время приостановки в отладчике, выбрав Отладка>Окна>Видимые. В окне Видимые отображаются переменные и их текущие значения. В окне Видимые отображаются все переменные, используемые в текущей или предыдущей строке (сведения о зависящем от языка поведении см. в соответствующей документации).
    2. Затем посмотрите на окно Локальные на вкладке рядом с окном Видимые.
    3. Разверните переменную letters , чтобы отобразить элементы, которые она содержит.

    Снимок экрана: проверка переменных в окне

    Снимок экрана: проверка переменных в окне

    Установка контрольного значения

    1. В основном окне редактора кода щелкните правой кнопкой мыши переменную name и выберите команду Добавить контрольное значение. В нижней части редактора кода откроется окно Контрольное значение. В окне Контрольное значение можно указать переменную (или выражение), которую необходимо отслеживать. Теперь у вас есть контрольное значение, заданное для переменной name , и по мере перемещения по отладчику вы можете наблюдать за изменением его значения. В отличие от других окон переменных, в окне Контрольное значение всегда отображаются просматриваемые вами переменные (они выделяются серым цветом, когда находятся вне области действия).

    Просмотр стека вызовов

    1. Во время приостановки в цикле for щелкните окно Стек вызовов, которое по умолчанию открыто в нижней правой области. Если оно закрыто, откройте его во время приостановки в отладчике, выбрав Отладка>Окна>Стек вызовов.
    2. Несколько раз нажмите клавишу F11, пока отладчик не приостановится в методе SendMessage . Взгляните на окно Стек вызовов.

    Снимок экрана: проверка стека вызовов.

    Снимок экрана: проверка стека вызовов.

    В окне Стек вызовов показан порядок вызова методов и функций. В верхней строке приведена текущая функция (в данном приложении метод SendMessage ). Во второй строке показано, что функция SendMessage была вызвана из метода main и т. д.

    Примечание Окно Стек вызовов аналогично перспективе «Отладка» в некоторых интегрированных средах разработки, например Eclipse.

    Изменение потока выполнения

    1. Дважды нажмите клавишу F11, чтобы запустить функцию std::wcout .
    2. Приостановив отладчик в вызове метода SendMessage , с помощью мыши захватите желтую стрелку (указатель выполнения) в левой части и переместите ее вверх на одну строку — обратно в std::wcout .
    3. Нажмите клавишу F11. Отладчик повторно выполнит функцию std::wcout (вы увидите это в выходных данных окна консоли). Изменяя поток выполнения, можно решать множество задач, например тестировать различные пути выполнения кода или повторно выполнять код без перезапуска отладчика.

    Предупреждение Как правило, при работе с этой функцией необходимо соблюдать осторожность — вы увидите соответствующее предупреждение во всплывающей подсказке. Могут отображаться и другие предупреждения. При перемещении указателя предыдущее состояние приложения не возвращается.

    Следующие шаги

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

    Источник: learn.microsoft.com

    Рейтинг
    ( Пока оценок нет )
    Загрузка ...
    EFT-Soft.ru