Как вы используете GDB? - PullRequest
16 голосов
/ 08 июня 2009

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

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

  1. b - прервать filename.c: строка #, функция, filename.cpp: функция, className :: Member
  2. n, c, s - следующий шаг продолжения
  3. имя программы GDB => установить точки останова ==> запустить [список параметров] (я делаю это, чтобы установить точки останова до запуска программы)
  4. l - перечислить окружающий исходный код.
  5. прикрепить идентификатор процесса 6 перерыв [местоположение]
  6. gdb имя_программы corefile.core (чтобы выяснить причину сбоя приложения)
  7. Я также иногда устанавливаю точку останова на выходе (break break) для проверки стеков программы
  8. информация b для проверки всех точек останова
  9. очистить [список точек останова]

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

Ответы [ 10 ]

12 голосов
/ 10 июня 2009

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

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

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

10 голосов
/ 09 июня 2009

Сценарии - хорошая функция GDB.

  1. Сначала вы устанавливаете точку останова, например: b someFunction \ n.
  2. Затем вы запускаете команду: команды \ n. GDB запросит команды для этой точки останова.
  3. Обычный сценарий - напечатать некоторое значение, а затем продолжить, поэтому введите:
  4. Чтобы завершить скрипт, нажмите: Ctrl-D

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

5 голосов
/ 08 июня 2009

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

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

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

4 голосов
/ 08 июня 2009

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

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

... но в основном я использую DDD в качестве внешнего интерфейса для GDB

3 голосов
/ 11 июня 2009

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

2 голосов
/ 25 сентября 2009

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

http://cgdb.sourceforge.net/

Это основанный на curses (цветной консоли) интерфейс для GDB, который сделал мою жизнь намного счастливее, когда я ограничился отладкой в ​​окне консоли.

1 голос
/ 09 июня 2009

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

(gdb) printf "%lu\n", (unsigned long)(-3L)
4294967293
1 голос
/ 08 июня 2009

См. Руководство пользователя на http://sources.redhat.com/gdb/current/onlinedocs/gdb_toc.html.

0 голосов
/ 30 сентября 2011

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

0 голосов
/ 13 августа 2009

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

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