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

Он использует объект []. Когда массив заполнен, он создает новый массив, размер которого на 50% больше, и копирует текущие элементы в новый массив. Это происходит автоматически.

16
задан 2 revs, 2 users 88%Sasha 8 June 2009 в 20:28
поделиться

9 ответов

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

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

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

5
ответ дан 30 November 2019 в 16:36
поделиться

Сценарии - хорошая возможность GDB.

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

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

10
ответ дан 30 November 2019 в 16:36
поделиться

Кроме того, что уже было опубликовано, я также использую:

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

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

12
ответ дан 30 November 2019 в 16:36
поделиться

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

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

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

4
ответ дан 30 November 2019 в 16:36
поделиться

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

1
ответ дан 30 November 2019 в 16:36
поделиться

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

(gdb) printf "%lu\n", (unsigned long)(-3L)
4294967293
1
ответ дан 30 November 2019 в 16:36
поделиться

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

3
ответ дан 30 November 2019 в 16:36
поделиться

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

0
ответ дан 30 November 2019 в 16:36
поделиться

Some time ago I found cgdb:

http://cgdb.sourceforge.net/

This is a curses (color console) based frontend for gdb that made my life a lot happier when I was restricted to debugging in a console window.

2
ответ дан 30 November 2019 в 16:36
поделиться