Gdb как запустить программу с параметрами

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

Вы знаете это чувство. Вы раздавили ящик Red Bull, надела наушники и всю ночь написали сотни — если не тысячи — строк для своей программы. Когда вы думаете, что у вас все получилось идеально, вы выполняете и… ничего.

Конечно, вы можете вручную вернуться к вашему коду построчно, ища отсутствующую переменную или символ, потенциально неуместный. Но если ваша программа состоит из тысяч строк, это может занять очень много времени и утомительно. Вы можете просто случайно пропустить свою ошибку, и даже если вы обнаружите, что что-то не так, как вы узнаете, что это единственное проблема в вашем коде?

Лучший способ эффективно решить эти ошибки — запустить отладчик.

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

АКОС. Семинар 13,5. Использование GDB

Что такое GDB? Как использовать GDB?

Окно компьютерного кода

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

GDB традиционно использовался с программами в операционной системе Linux, но он также будет работать с наиболее популярными Windows варианты и даже macOS. Отладчик также можно запустить с использованием примерно десятка популярных компьютерных языков, включая C и C ++.

Скачивание GDB довольно просто. Последнюю версию отладчика можно получить на FTP-сервере GNU Project.

Проект GNU также предлагает более старые версии GDB, восходящие к 1988 году. Эти версии предназначены просто для ностальгии, они, скорее всего, не будут работать на современных компьютерах и программах.

Полезные функции отладки, которые вы можете запустить в GDB

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

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

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

1. Настройка GDB

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

Как использовать GDB? Чтобы указать GDB, какие файлы вы хотите протестировать, просто введите «-g» в GCC прямо перед именем программы, которую вы хотите отлаживать. Например, если ваша программа называется hopscotch, то ваше приглашение в этой части вашего GCC будет отображаться как «-g hopscotch».

2. Запуск программ в GDB

После того, как вы указали, какую программу нужно отлаживать, можно запустить GDB с помощью простой команды. Предполагая, что наша программа называется классики, как в сценарии выше, вам нужно ввести «gdb hopscotch».

На этом этапе вы должны получить сообщение, в котором информация об авторских правах и лицензиях и некоторые основные правила для GDB, которые в основном просто говорят, что программа бесплатна и вы можете вносить любые изменения, которые считаете нужными. В конце сообщения вы увидите подсказку с надписью «(gdb)». Чтобы запустить программу, просто введите «запустить» после этого запроса и нажмите Enter.

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

3. Как использовать GDB, используя точки останова в GDB

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

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

Чтобы запустить GDB с точкой останова, вы просто вставите строку, в которой вы хотите, чтобы программа остановилась, после имени программы. Например, если вы хотите, чтобы GDB останавливался после 10-й строки кода, вы должны ввести следующее после приглашения (gdb): «break hopscotch: 10». Вы можете вставить столько точек останова, сколько захотите, но как только вы дадите GDB команду запуска, он остановится на вашей первой точке останова, если не обнаружит ошибку перед этой строкой.

Кроме того, вы также можете установить точку останова для конкретной функции. Это полезно, если вы точно не знаете, в какой строке появляется эта функция. Примером может служить «моя функция», которая будет где-то описана в вашем коде. Просто введите «break myfunction» после приглашения (gdb), и отладчик остановится, когда достигнет myfunction.

Если вам когда-либо понадобится удалить точку останова, вы можете просто ввести delete и номер точки останова (ваша первая точка останова — номер 1, вторая — номер 2 и так далее) в приглашении (gdb).

4. Команды Continue и Step в GDB

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

У вас есть несколько вариантов использования GDB, но они наиболее распространены:

  • Продолжать: Это побудит отладчик перейти к следующей точке останова, если была установлена ​​другая. В противном случае он будет работать до конца программы. Если GDB обнаружит другую ошибку, он остановится и предоставит местоположение проблемы.
  • Шаг: Это побудит отладчик перейти к следующей строке вашего программного кода. Затем он приостановится, пока вы не дадите еще одну команду. Эта функция полезна, если вы хотите проверить определенную область построчно, но может стать утомительной при использовании для большого раздела вашей программы.
Читайте также:
Качество по рабочая программа

5. Точки наблюдения в GDB

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

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

Команда для установки точки наблюдения очень похожа на ту, которая используется для установки точки останова. После приглашения (gdb) вы вводите «watch» и переменную, которую хотите отслеживать. Ваша команда будет выглядеть так: (gdb) watch myvariable.

6. Команда справки в GDB

Если эти команды не выполняют функцию, которую вы надеетесь запустить с GDB, отладчик имеет грубое меню справки.

Как использовать GDB, просто введите «help» после приглашения (gdb), и вы получите список из примерно дюжины классов команд. Некоторые из этих классов включают:

  • псевдонимы
  • HireAHelper определяется пользователем
  • останова
  • HireAHelper неясный
  • внутренности
  • Поддержка HireAHelper

Отсюда вы можете ввести «help», а затем имя класса, и вы получите более подробный список команд.

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

Наконец, если вы наберете «help all», вы получите полный список доступных команд.

7. Выход из GDB

Как только вы закончите запускать отладочный тест, не забудьте выйти из GDB. Это можно сделать, просто набрав «q» после приглашения (gdb) и нажав Enter.

Начните использовать GDB для отладки ваших программ

экран компьютера с кодом, написанным белым на черных экранах

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

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

Инвестируйте в недвижимость на экране с новым большой экран, монитор с подсветкой availabe в пяти разных размерах и ценах.

Похожие посты:

  1. Как отлаживать программы C в Linux с помощью gdb
  2. Новое обновление патча Minecraft: Bedrock Edition распространяется на всех игроков
  3. Основные командные инструменты для решения практически любых сетевых проблем на Windows 10
  4. Как установить программное обеспечение из исходного кода . и затем удалить его
  5. Как создать справочную страницу в Linux
  6. Amazon Alexa пасхальные яйца: более 180 забавных вещей, чтобы спросить Алекса
  7. Исправлено — Ошибка BSOD INVALID_DATA_ACCESS_TRAP в Windows 10
  8. CloudBerry Backup для Linux: настройка и запуск резервного копирования для защиты ваших данных
  9. Использование MySQL с базовыми командами SQL
  10. 10 способов открыть командную строку в Windows 10

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

Шпаргалка полезных команд GDB

2) как подсказка тем кто постоянно работает с IDA, Ghidra или любым другим мощным и надежным инструментом, но в силу тех или иных обстоятельств решить задачу проще и быстрее с помощью GDB, и не очень хочется залезать в официальную документацию и снова все вспоминать

Основные команды

Запуск

Общий синтаксис выбора исполняемого файла для анализа

gdb program_name

Запустить выполнение программы

run | r

Присоединиться к gdbserver

target remote host:port

Присоединиться к процессу, отключиться от него

attach PID / detach
quit | q CTRL + D

Статический анализ

Выбрать синтаксис ассемблера

set disassembly-flavor intel/att

Просмотреть информацию об архитектуре, секциях

info file

Получение списка функций

info functions | i func

Получение asm-листинга функции

disas func_name disas address

Если у вас есть исходники (можем собрать с опцией -g3 для gcc) или исследуемая программа содержит отладочную информацию, можем посмотреть листинг ее исходного кода

list func_name

Динамический анализ

Установить аргументы для каждого запуска программы и посмотреть их

set args show args

Распределение виртуальной памяти

info proc mappings
registers

Отладка

Шаг с заходом в функцию

step | s

Шаг с прыжком через вызываемую подпрограмму

next | n

Выполнить до нужной строки, адреса

until | u number_of_list_string until | u *func_name+offset until | u *address

Информация об аргументах функции, локальных переменных (для файлов, содержащих отладочную информацию) и фрейме текущей функции

info args info locals info frame

Просмотреть список процессов и выбрать интересующий

info threads thread number

Способы расстановки breakpoints

b func_name b *func_name+offset b *address

Посмотреть список точек останова, включить или отключить, удалить breakpoint

info break disable/enable breakpoint_number delete breakpoint_number ignore breakpoint_number n // остановится на этой точке пройдя ее n раз

Продолжить выполнение до следующего breakpoint-а

continue | c
telescope telescope $rsp+64

Для отображения значения по указанному адресу используется команда x, где через «/» указывается формат вывода

x/i — инструкция x/x — hex x/s — строка x/a — адрес

а также размер вывода

x/b — 8-bit x/h — 16-bit x/w — 32-bit x/g — 64-bit
x/64bx x/i $pc

Передача аргумента командной строки

run $(python -c «print(‘A’*32 + ‘xdexad’)») run $(echo «asdf\xdexad»)

Для передачи значений функциям ввода

Gdb Сервер

Запустить сервер gdb для отладки

gdbserver host:port program

Reverse Debug

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

Для этого, после запуска отладчика укажем gdb, что хотим начать использовать reverse debug и стоит сохранять состояния программы

record

После этого станут доступны следующие команды

reverse-step reverse-next

Создание дампа

Сдампить участок памяти ( часто необходимо при работе с распаковщиками )

dump memory output_file start_addr end_addr

Настройка для работы

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

display/5i $pc display/g $rax display/g $rbx display/g $rcx

Делаем жизнь проще с GEF

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

Посмотреть состояние aslr, включить/отключить

aslr aslr on/off

Для проверки исполняемого файла на наличие ASLR, Canary, PIE и т.д.

checksec
heap chunks

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

canary

Чуть более удобный вывод, чем info proc mappings

vmmap

Просмотр регистра флагов и изменение их

flags flags -Flag_name +Flag_name

Помощь для поиска уязвимостей форматной строки (установка на них точек останова, информация по найденным функциям)

format-string-helper

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

pattern create 128 pattern search 0x61616167 pattern search $rbp

Поиск строк по шаблону

search-pattern pattern
patch byte/word/dword/qword address value

Читайте также:
Программа моя семья описание

Печать массива в формате удобном для копирования в python код. Параметр b должен быть 8/16/32/64, l контролирует длину массива

print-format -b 64 -l 1 $rsp

Для поиска шеллкода по шаблону

shellcode search pattern shellcode get shellcode_number

Ксорим значения в памяти и регистрах

xor display address/register size xor_key xor patch address/register size xor_key

  • реверс-инжиниринг для новичков
  • gdb

Источник: habr.com

Gdb как запустить программу с параметрами

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

Синтаксис команд

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

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

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

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

GDB может также использовать по-другому: для разделения длинного вывода, аналогично обычной утилите (see section Размер экрана). Так как в такой ситуации легко нажать слишком много раз, GDB блокирует повтор после любой команды, генерирующей такой тип вывода.

Любой текст, расположенный от до конца строки является комментарием; он ничего не делает. В основном, это полезно в командных файлах (see section Командные файлы).

Завершение команд

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

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

GDB дополнит остаток слова , так как у команды есть единственная подкоманда, начинающаяся с :

(gdb) info breakpoints

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

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

(gdb) b make_ GDB издает звук; нажав еще раз, видим: make_a_section_from_file make_environ make_abs_section make_function_type make_blockvector make_pointer_type make_cleanup make_reference_type make_command make_symbol_completion_list (gdb) b make_

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

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

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

Наиболее вероятная ситуация, где вам это может потребоваться, это при вводе имени функции в Си++. Это происходит потому, что Си++ допускает перегрузку функций (множественные определения одной и той же функции, различающиеся типом параметров). Например, когда вы хотите установить точку останова, вам может потребоваться различать, имеете вы в виду версию с параметром целого типа, , или же версию с параметром вещественного типа, . Для использования возможностей завершения слов в такой ситуации, введите одинарную кавычку в начале имени функции. Это предупреждает GDB, что ему может потребоваться принять во внимание больше информации, чем обычно, когда вы нажимаете или для запроса завершения слова:

(gdb) b ‘bubble( bubble(double,double) bubble(int,int) (gdb) b ‘bubble(

В некоторых случаях, GDB может сам определить, что завершение имени требует использования кавычек. Когда это происходит, GDB вставляет кавычку за вас (выполняя завершение на столько, на сколько это возможно), если вы не ввели ее в первой позиции:

(gdb) b bub GDB изменяет вашу строку ввода на следующую, и издает звук: (gdb) b ‘bubble(

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

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

Получение справки

Используя команду , вы всегда можете запросить информацию о командах у самого GDB.

Вы можете использовать (сокращенно ) без параметров, для отображения короткого списка именованных классов команд: (gdb) help List of classes of commands: aliases — Aliases of other commands breakpoints — Making program stop at certain points data — Examining data files — Specifying and examining files internals — Maintenance commands obscure — Obscure features running — Running the program stack — Examining the stack status — Status inquiries support — Support facilities tracepoints — Tracing of program execution without stopping the program user-defined — User-defined commands Type «help» followed by a class name for a list of commands in that class. Type «help» followed by command name for full documentation.

Command name abbreviations are allowed if unambiguous. (gdb) Используя один из общих классов справки как параметр, вы можете получить список отдельных команд этого класса. Вот, например, отображение справки для класса : (gdb) help status Status inquiries. List of commands: info — Generic command for showing things about the program being debugged show — Generic command for showing things about the debugger Type «help» followed by command name for full documentation.

Читайте также:
Программы для диагностики автомобилей Ниссан

Command name abbreviations are allowed if unambiguous. (gdb) Если указать имя команды в качестве параметра , GDB выведет короткую справку о том, как ей пользоваться. Команда производит поиск по регулярному выражению, заданному в , во всех командах GDB и их документации. Она выводит все найденные совпадения.

Например: apropos reload приводит к: set symbol-reloading — Set dynamic symbol table reloading multiple times in one run show symbol-reloading — Show dynamic symbol table reloading multiple times in one run Команда перечисляет все возможные завершения для начала команды. Используйте для задания начала команды, которую вы хотите завершить. Например, complete i приводит к: if ignore info inspect Это предназначено для использования GNU Emacs.

В дополнение к , вы можете использовать команды GDB и для получения информации о состоянии вашей программы, или о состоянии самого GDB. Каждая команда поддерживает много тем запросов; это руководство описывает каждую тему в соответствующем месте. Списки в разделах и в Алфавитном указателе указывают на все подкоманды. See section Алфавитный указатель.

Эта команда (сокращенно ) предназначена для описания состояния вашей программы. Например, вы можете с помощью просмотреть аргументы, переданные вашей программе, с помощью перечислить используемые в настоящий момент регистры, или используя вывести установленные вами точки останова. Вы можете получить полный список подкоманд команды с помощью . Вы можете присвоить переменной среды результат выражения с помощью . Например, вы можете установить приглашение GDB в знак $ используя . В отличие от , команда предназначена для описания состояния самого GDB. Вы можете изменить почти все, что показывает , используя соответствующую команду . Например, командой вы можете задать, какую систему счисления использовать для вывода, или просто узнать, какая система используется в данный момент с помощью команды . Для отображения всех устанавливаемых параметров и их текущих значений, вы можете использовать без аргументов; также можно использовать . Обе команды приводят к одинаковому результату.

Вот три разнообразные подкоманды , которые не имеют соответствующих -команд:

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

Кроме того, многие распространители операционных систем поставляют модифицированные версии GDB, также существуют модифицированные версии GDB в GNU/Linux. Номер версии—это номер, появляющийся при старте. Выводит информацию о правах на распространение GDB. Отображает заявление GNU об отсутствии гарантий, или гарантии, если ваша версия GDB поставляется с гарантиями.

Go to the first, previous, next, last section, table of contents.

() Отобразить значение выражения . Допускается использование практически любого выражения языка C/C++, в том числе и вызовы функций. Например: , , .

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

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

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

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

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

Включить отображение элемента из списка, отключенного ранее.

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

Вывести список автоматически отображаемых выражений.

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

Точки останова

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

() Установить точку останова на строке исходного кода с номером . Все точки останова имеют свои номера, определяемые при их установке.

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

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

Установка условной точки останова. Выполнение останавливается на данной строке или функции, если выполнено условие . Пример: .

или Удалить точку останова на функции или в строке с номером .

() Удалить точки останова с номерами из указанного диапазона. Например, или . Если диапазон не задан, удаляются все точки останова.

Отключить точки из заданного диапазона.

Включить точки из заданного диапазона.

Точки из заданного диапазона включаются до первого срабатывания, после чего отключаются.

Точки из заданного диапазона включаются до первого срабатывания, после чего удаляются.

Превращение точки останова с номером в условную с условием .

Превращение точки останова с номером в безусловную.

Вывести информацию обо всех имеющихся точках останова.

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

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

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

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

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

Вывести информацию о всех точках наблюдения.

Как использовать GDB (отладчик Gnu) и OpenOCD для отладки микроконтроллеров — от терминала?

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

Для вывода исходного текста программы используется команда () в различных вариантах:

Вывести строки исходного кода, вокруг строки с номером .

Вывести начало кода функции .

Вывести строки с номерами от до .

Вывесть строки, начиная с .

Вывести строки до номера .

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

Когда программа остановила свою работу, прежде всего необходимо узнать, где это произошло и как она туда попала. Особенно это полезно при отладке ошибок.

Всякий раз, когда вызывается функция, информация о вызове сохраняется в стеке. Информация сохраняется в блоке данных, называемом кадром стека.

Вывести содержимое стека.

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

Переместиться по стеку вверх на кадров. По умолчанию равно 1.

Переместиться по стеку вниз на кадров.

Вывести информацию о текущем кадре.

Вывести информацию об аргументах текущего кадра.

Вывести информацию о всех локальных переменных текущего кадра.

Источник: steptosleep.ru

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