Начиная с gdb 7.0, существует обратимая отладка , поэтому ваши новые любимые команды:
* reverse-continue ('rc') -- Continue program being debugged but run it in reverse
* reverse-finish -- Execute backward until just before the selected stack frame is called
* reverse-next ('rn') -- Step program backward, proceeding through subroutine calls.
* reverse-nexti ('rni') -- Step backward one instruction, but proceed through called subroutines.
* reverse-step ('rs') -- Step program backward until it reaches the beginning of a previous source line
* reverse-stepi -- Step backward exactly one instruction
* set exec-direction (forward/reverse) -- Set direction of execution.
Использование -command=<file with gdb commands>опции при запуске gdb. То же, что и -x <command file>. Этот командный файл может содержать команды gdb, такие как точки останова, параметры и т. Д. Полезно в случае, если конкретный исполняемый файл должен быть подвергнут последовательным запускам отладки с использованием gdb.
Вы также можете использовать -iexопцию для добавления отдельных команд в командную строку gdb.
doug65536
5
скриптинг gdb - хороший трюк, кроме этого мне нравится включать / выключать блокировку планировщика, чтобы предотвратить запуск других потоков, когда вы входите в один.
как сделать это по умолчанию? Я пробовал использовать .gdbinit, но gdb печатает /home/omry/.gdbinit:1: Ошибка в исходном командном файле: Target 'None' не может поддерживать эту команду.
Omry Yadan
4
Использование .gdbinit (стартовый файл, в котором можно писать макросы и вызывать из gdb). Поместите .gdbinit в свой домашний каталог, чтобы он загружался каждый раз при загрузке gdb
info thread, чтобы перечислить все активные потоки, и f (#) -> # номер потока, на который вы хотите переключиться
иногда я использую gdb для преобразования из шестнадцатеричного в десятичное или двоичное, это очень удобно, вместо того, чтобы открывать калькулятор
Вместо того, чтобы запускать gdb с опцией -tui, чтобы увидеть дочерний процесс, содержащий экран, который выделяет, где исполняемая строка кода находится в вашей программе, переходите к этой функции и выходите из нее с помощью Cx o и Cx a. Это полезно, если вы используете эту функцию и временно не используете ее, поэтому вы можете использовать стрелку вверх для получения предыдущей команды.
вы можете изменить фокус на командное окно, используя focus cmdтак, чтобы стрелки вверх / вниз работали. Вы переключаетесь обратно, используя focus src.
Натан Феллман,
3
Это может быть полезно, я уверен, что это можно улучшить, помогите добро пожаловать:
Ответы:
источник
info locals
- Просмотр всех локальных переменных; список - просмотреть источник; rbreak - прерывание функции, соответствующей регулярному выражению.set print object on
для полиморфных элементов, иset print elements 0
это две команды, которые я использую очень часто. Довольно полезно.t a a bt
(значениеthread apply all backtrace
). Может использоваться (почти) со всеми другими командами. Особенно полезно сbt full
.Запустите gdb с текстовым пользовательским интерфейсом
источник
Начиная с gdb 7.0, существует обратимая отладка , поэтому ваши новые любимые команды:
* reverse-continue ('rc') -- Continue program being debugged but run it in reverse * reverse-finish -- Execute backward until just before the selected stack frame is called * reverse-next ('rn') -- Step program backward, proceeding through subroutine calls. * reverse-nexti ('rni') -- Step backward one instruction, but proceed through called subroutines. * reverse-step ('rs') -- Step program backward until it reaches the beginning of a previous source line * reverse-stepi -- Step backward exactly one instruction * set exec-direction (forward/reverse) -- Set direction of execution.
источник
Вместо запуска GDB с параметром «-tui» вы также можете через некоторое время переключиться в текстовый режим, набрав «wh».
источник
Ctrl-a a
? Это шутка? Больше похоже наtmux
/screen
command. И у меня не работает. Он должен быть один из , как в документации :C-x C-a
,C-x a
,C-x A
.C-x a
. Вы также можете переключать представления с помощьюC-x 1
иC-x 2
в режиме tui, чтобы также видеть сборку (при необходимости).thread apply all bt
илиthread apply all print $pc
: Чтобы быстро узнать, что делают все потоки.источник
Например, макросы, определенные в stl-views.gdb
источник
Использование
-command=<file with gdb commands>
опции при запуске gdb. То же, что и-x <command file>
. Этот командный файл может содержать команды gdb, такие как точки останова, параметры и т. Д. Полезно в случае, если конкретный исполняемый файл должен быть подвергнут последовательным запускам отладки с использованием gdb.источник
-iex
опцию для добавления отдельных команд в командную строку gdb.скриптинг gdb - хороший трюк, кроме этого мне нравится включать / выключать блокировку планировщика, чтобы предотвратить запуск других потоков, когда вы входите в один.
источник
set scheduler-locking on
внутри gdbinfo thread, чтобы перечислить все активные потоки, и f (#) -> # номер потока, на который вы хотите переключиться
иногда я использую gdb для преобразования из шестнадцатеричного в десятичное или двоичное, это очень удобно, вместо того, чтобы открывать калькулятор
источник
Вместо того, чтобы запускать gdb с опцией -tui, чтобы увидеть дочерний процесс, содержащий экран, который выделяет, где исполняемая строка кода находится в вашей программе, переходите к этой функции и выходите из нее с помощью Cx o и Cx a. Это полезно, если вы используете эту функцию и временно не используете ее, поэтому вы можете использовать стрелку вверх для получения предыдущей команды.
источник
focus cmd
так, чтобы стрелки вверх / вниз работали. Вы переключаетесь обратно, используяfocus src
.Это может быть полезно, я уверен, что это можно улучшить, помогите добро пожаловать:
define mallocinfo set $__f = fopen("/dev/tty", "w") call malloc_info(0, $__f) call fclose($__f)
источник
Для отладки STL добавьте содержимое в .gdbinit, следуя этим инструкциям:
http://www.yolinux.com/TUTORIALS/GDB-Commands.html#STLDEREF
источник