Самые сложные/полезные команды для отладчика GDB [закрыто]

StackOverflow https://stackoverflow.com/questions/1471226

  •  16-09-2019
  •  | 
  •  

Вопрос

Можете ли вы опубликовать свои самые сложные и полезные команды, запуская отладчик, например gdb или dbx?

Это было полезно?

Решение

<Ол>
  • трассировку полный : Полная трассировку с локальными переменными
  • до вниз рамка : Перемещение через кадров
  • смотреть : Приостановить процесс, когда определенное условие удовлетворяется
  • установить печать довольно на : Выдать очаровательно форматированный исходный код C
  • установить протоколирование на : бревенчатый сеанса отладки, чтобы показать другим для поддержки
  • установить печать массив на : Довольно массив печати
  • закончить : Продолжить до конца функции
  • включить и отключить : Включение / выключение точки останова
  • tbreak : Разбейте один раз, а затем удалить точку останова
  • , где : Номер строки в настоящее время выполняется
  • информация местные : Просмотреть все локальные переменные
  • информация арг : Просмотреть все аргументы функции
  • список : просмотреть исходный код
  • RBREAK : перерыв на функцию сопоставления регулярное выражение
  • Другие советы

    Запустите 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, следуя этим инструкциям:

    http://www.yolinux.com/TUTORIALS/GDB-Commands.html#STLDEREF

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top