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

Помимо уже упомянутых...

  • Используя эти for..in конструкция для итерации по массивам
    (выполняет итерации по методам массива И индексам)

  • Используя JavaScript, встроенный как <body onload="doThis();">
    (негибкий и предотвращает несколько слушателей события)

  • Используя 'Функцию ()' конструктор
    (плохо по тем же причинам eval() плохо)

  • Передающие строки вместо функций к setTimeout или setInterval
    (также использование eval() внутренне)

  • Доверие неявным операторам, не используя точки с запятой
    (дурная привычка взять, и может привести к неожиданному поведению)

  • Используя/*.. */для блокирования строк кода
    (может вмешаться в regex литералы, например: /* /.*/ */)

    < evangelism> И конечно, не используя Прототип;) </evangelism>

136
задан Vijay 24 September 2009 в 11:59
поделиться

10 ответов

  1. backtrace full: Complete backtrace with local variables
  2. up, down, frame: Move through frames
  3. watch: Suspend the process when a certain condition is met
  4. set print pretty on: Prints out prettily formatted C source code
  5. set logging on: Log debugging session to show to others for support
  6. set print array on: Pretty array printing
  7. finish: Continue till end of function
  8. enable and disable: Enable/disable breakpoints
  9. tbreak: Break once, and then remove the breakpoint
  10. where: Line number currently being executed
  11. info locals: View all local variables
  12. info args: View all function arguments
  13. list: view source
  14. rbreak: break on function matching regular expression
132
ответ дан 23 November 2019 в 23:38
поделиться

Начиная с 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.
43
ответ дан 23 November 2019 в 23:38
поделиться

thread apply all bt or thread apply all print $pc: For finding out quickly what all threads are doing.

14
ответ дан 23 November 2019 в 23:38
поделиться

Запустить GDB с текстовым пользовательским интерфейсом

gdb -tui
99
ответ дан 23 November 2019 в 23:38
поделиться

Например, макросы, определенные в stl-views.gdb

6
ответ дан 23 November 2019 в 23:38
поделиться

Вместо запуска GDB с параметром «-tui» вы также можете через некоторое время переключиться в текстовый режим, набрав «wh».

20
ответ дан 23 November 2019 в 23:38
поделиться
  • Использование .gdbinit (файл запуска, в котором вы можете писать макросы и вызывать из gdb). Поместите .gdbinit в свой домашний каталог, чтобы он загружался каждый раз при загрузке gdb
  • информационных потоков , чтобы перечислить все активные потоки, и f (#) -> # номер потока, на который вы хотите переключиться

  • иногда я использую gdb для преобразования из шестнадцатеричного в десятичное или двоичное, это очень удобно вместо открытия калькулятора

    • p / d 0x10 -> дает десятичный эквивалент 0x10
    • p / t 0x10 -> двоичный эквивалент 0x10
    • p / x 256 -> шестнадцатеричный эквивалент 256
3
ответ дан 23 November 2019 в 23:38
поделиться

сценарий gdb - хороший трюк, кроме того, что мне нравится включить / выключить блокировку планировщика, чтобы предотвратить запуск других потоков, когда вы входите в один.

5
ответ дан 23 November 2019 в 23:38
поделиться

Использование параметра -command = <файл с командами gdb> при запуске gdb. То же, что -x <командный файл> . Этот командный файл может содержать команды gdb, такие как точки останова, параметры и т. Д. Полезно в случае, если конкретный исполняемый файл необходимо подвергнуть последовательным запускам отладки с использованием gdb.

6
ответ дан 23 November 2019 в 23:38
поделиться

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

define mallocinfo
  set $__f = fopen("/dev/tty", "w")
  call malloc_info(0, $__f)
  call fclose($__f)
2
ответ дан 23 November 2019 в 23:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: