Как вы используете 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, который сделал мою жизнь намного счастливее, когда мне было запрещено отлаживать консольное окно.
Ответ 7
См. руководство пользователя на http://sources.redhat.com/gdb/current/onlinedocs/gdb_toc.html.
Ответ 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