Самые сложные/полезные команды для отладчика GDB [закрыто]
Вопрос
Можете ли вы опубликовать свои самые сложные и полезные команды, запуская отладчик, например gdb или dbx?
Решение
Другие советы
Запустите GDB с текстовым пользовательским интерфейсом.
gdb -tui
Начиная с 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».
thread apply all bt
или thread apply all print $pc
:Для быстрого выяснения того, что делают все потоки.
Например, макросы, определенные в stl-views.gdb
Используя -command=<file with gdb commands>
опция при запуске GDB.Такой же как -x <command file>
.Этот командный файл может содержать команды GDB, такие как точки останова, параметры и т. д.Полезно в случае, если определенный исполняемый файл необходимо подвергнуть последовательным запускам отладки с использованием GDB.
Сценарий GDB - это хороший трюк, кроме того, что мне нравится установить блокировку планировщика, чтобы предотвратить запуск других потоков, когда вы вступаете в один.
Вместо того, чтобы запускать gdb с опцией -tui, чтобы увидеть дочерний процесс, содержащий экран, показывающий, где находится исполняемая строка кода в вашей программе, включайтесь и выходите из этой функции с помощью C-x o и C-x a.Это полезно, если вы используете эту функцию и временно ее не используете, чтобы вы могли использовать стрелку вверх для перехода к предыдущей команде.
- С использованием .gdbinit (запускной файл, в котором вы можете писать макросы и вызывать их из GDB).Поместите .gdbinit в свой домашний каталог, чтобы он подбирался каждый раз при загрузке gdb.
информационные темы для вывода списка всех активных потоков и f(#) -> # номер потока, на который вы хотите переключиться
иногда я использую GDB для преобразования шестнадцатеричного числа в десятичное или двоичное, это очень удобно вместо того, чтобы открывать калькулятор
- p/d 0x10 -> дает десятичный эквивалент 0x10
- p/t 0x10 -> двоичный эквивалент 0x10
- p/x 256 -> шестнадцатеричный эквивалент 256
Это может быть полезно, но я уверен, что его можно улучшить, пожалуйста, помогите:
define mallocinfo
set $__f = fopen("/dev/tty", "w")
call malloc_info(0, $__f)
call fclose($__f)
Для отладки STL добавьте содержимое в .gdbinit, следуя этим инструкциям: