Как вы используете gdb?

Я решил узнать, как наши практикующие C/C + * nix используют отладчик gdb.

Вот что я обычно использую:

  • b - break filename.c: строка #, function, filename.cpp: function, className:: Member
  • n, c, s - следующий шаг продолжения
  • gdb program name = > set breakpoints == > run [список параметров] (я делаю это, чтобы установить точки останова перед запуском программы)
  • l - список окружающего исходного кода.
  • Прикрепить processID 6 break [location]
  • gdb programName corefile.core(чтобы узнать, почему приложение разбилось)
  • Я также иногда устанавливаю точку останова в функции выхода (break exit) для проверки стеков программ
  • info b для проверки всех контрольных точек
  • clear [список контрольных точек]

Как вы его используете?

Ответы

Ответ 1

Самые полезные команды gdb, на мой взгляд (кроме всех уже перечисленных):

  • информационные потоки - информация о потоках
  • поток N - переключиться на поток N
  • catch throw - перерыв в любом исключении. Полезно, когда вы поймали ошибку только после разматывания стека.
  • printf, распечатать - просмотреть все и все выражения, printf принимает спецификаторы форматирования C-стиля

Наконец, при отладке по медленной ссылке текстовый интерфейс может быть полезен. Чтобы использовать его, запустите gdb с помощью командной строки --tui.

Ответ 2

Помимо вещей, которые уже были опубликованы, я также использую:

  • a . gdbinit файл для контейнеров STL
  • signal SIGNAL noprint nostop для некоторых пользовательских сигналов, которые не представляют реального интереса при отладке
  • C-Casts для указателей разыменования
  • catchpoints (catch catch, catch catch)
  • условие условных прерываний и точек наблюдения
  • редко gdbserver для удаленной отладки
  • gdb program coredump, для этих смущающих segfaults;)

PS: Одна из причин, по которой я лично люблю gdb btw. заключается в том, что он поддерживает выполнение табуляции почти для всех (команды gdb, символы в таблице символов, функции, функции-члены и т.д.). По моему мнению, это довольно хороший рост производительности.

Ответ 3

Scripting - отличная функция GDB.

  • Сначала вы устанавливаете точку останова, например: b someFunction\n.
  • Затем вы запустите команду: commands\n. GDB будет запрашивать команды для этой точки останова.
  • Общий сценарий - напечатать некоторое значение, а затем продолжить, поэтому вы должны ввести: p someVar\n continue\n.
  • Для завершения script нажмите: Ctrl-D

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

Ответ 4

gdb - не моя специальность, но вот что я использую:

  • bt список стека
  • up, down перемещение в стеке
  • until продолжаться до тех пор, пока не будет достигнута линия с большим числом, чем текущая, - для выхода из цикла
  • watch [expr] сломать программу при изменении expr

... но в основном я использую ddd как интерфейс для gdb

Ответ 5

Введите Ctrl-X Ctrl-A, чтобы открыть простое окно с предварительным просмотром исходного кода.

Ответ 6

Некоторое время назад я нашел cgdb:

http://cgdb.sourceforge.net/

Это интерфейс curses (color console) для gdb, который сделал мою жизнь намного счастливее, когда мне было запрещено отлаживать консольное окно.

Ответ 8

Существует также несколько приложений, которые не связаны напрямую с отладкой. Например, это может использоваться для оценки выражения C:

(gdb) printf "%lu\n", (unsigned long)(-3L)
4294967293

Ответ 9

Я использую переключатель gdb -tui для отличного текстового интерфейса пользователя (своего рода gui в текстовом режиме). Он поддерживает несколько окон и, как правило, гораздо более дружелюбен, чем использование команды "list" (поскольку она показывает источник в окне sep)

Ответ 10

Начинающие, использующие gdb, будут чувствовать себя так же жестко. Но есть инструмент DDD (Data Display Debugger), основанный на графическом интерфейсе, который похож на gdb. u имеет консоль внизу для запуска команд gdb, а верхняя 3/4-я часть будет кодом. U ll имеет возможность изучать и понимать команды и поток excatly