Найбільш складні / корисні команди для налагодження gdb [закрито]


138

Чи можете ви розміщувати свої найскладніші та найкорисніші команди, коли ви запускаєте налагоджувач, наприклад, gdb або dbx.


Я знайшов цю документацію гарною. scc.ustc.edu.cn/zlsc/sugon/intel/debugger/cl/…
Рік

Відповіді:


134
  1. зворотний трек повний : завершення зворотного зв'язку з локальними змінними
  2. вгору , вниз , кадр : переміщення через кадри
  3. спостерігати : призупиніть процес, коли буде виконано певну умову
  4. налаштування друку досить увімкнено : друкує чітко відформатований вихідний код C
  5. встановити вхід у систему : сеанс налагодження журналу для показу іншим для підтримки
  6. встановити масив друку : Досить друкувати масив
  7. закінчення : Продовжуйте до кінця функції
  8. включити та відключити : увімкнути / вимкнути точки прориву
  9. tbreak : Перервіть один раз, а потім видаліть точку зламу
  10. де : номер рядка, який зараз виконується
  11. інформація місцевих жителів : перегляд усіх локальних змінних
  12. інформаційні аргументи : Перегляд усіх аргументів функції
  13. список : переглянути джерело
  14. rbreak : перерва на функцію, що відповідає регулярному виразу

7
info locals- Переглянути всі локальні змінні; list - джерело перегляду; rbreak - перерва на функцію, що відповідає регулярному вираженню.
Пол Біггар

source / path / to / macro / file І всі мої витончені макроси є там, щоб допомогти мені налагоджувати за лічені секунди.
Sudhanshu

1
set print object onдля поліморфних елементів і set print elements 0це дві команди, які я використовую дуже часто. Досить корисна.
Кирило Кіров

1
Також, t a a bt(значення thread apply all backtrace). Може використовуватися з (майже) всіма іншими командами. Особливо корисно с bt full.
Кирило Кіров

101

Запустіть gdb за допомогою текстового інтерфейсу користувача

gdb -tui

21
Я не можу повірити, що ця особливість уникала мене за всі ці роки. Дякую, дякую, дякую!
DevSolar

Спасибі Ви заощадили багато мого часу .. Чудовий ....
sujin

1
І ще: <minus> RET
SullX

1
або використання cgdb
Patryk

дуже приємні функції. Пропустив це поки що ...
PraveenMax

45

Починаючи з 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.

21

Замість запуску GDB з параметом "-tui" ви також можете через деякий час перейти в текстовий режим, ввівши "wh".


3
Ctrl-a a, щоб повернутись до "звичайного" перегляду командного рядка!
Кевін

2
"-" можна використовувати замість "wh". Коротше, тим краще .. :)
raj_gt1

6
Ctrl-a a? Це жарт? Більше схожий tmux/ screenкоманди. І не працює для мене. Він повинен бути один з , як в документації : C-x C-a, C-x a, C-x A.
x-yuri

Це насправді C-x a. Ви також можете перемикати перегляди в режимі tui C-x 1і C-x 2в режимі tui, щоб побачити також збірку (за потреби).
Сем Уітлок

16

thread apply all btабо thread apply all print $pc: Швидко з’ясувати, що всі нитки роблять.


Це була команда, яку я шукав давно-довго! Дуже неприємно перевіряти всі 30 ниток одна за одною!
tothphu


6

Використання -command=<file with gdb commands>опції під час запуску gdb. Те саме, що -x <command file>. Цей командний файл може містити команди gdb, такі як точки перерви, параметри тощо. Корисний у випадку, якщо певний виконуваний файл повинен бути поставлений через послідовні запуски налагодження за допомогою gdb.


Ви також можете скористатися -iexопцією для додавання окремих команд у командному рядку gdb.
doug65536

5

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


1
Як встановити блокування планувальника?
deft_code

3
set scheduler-locking onвсередині gdb
Бен

як зробити це за замовчуванням? Я спробував це .gdbinit, але gdb друкує /home/omry/.gdbinit:1: Помилка джерела командного файлу: Ціль "None" не може підтримувати цю команду.
Омрі Ядан

4
  • Використання .gdbinit (файл запуску, куди можна писати макроси та дзвонити з gdb). Помістіть .gdbinit у свій домашній каталог, щоб він вибирався щоразу, коли gdb завантажується
  • інформаційні потоки, щоб перелічити всі активні потоки, і f (#) -> # номер потоку, на який потрібно перейти

  • колись я використовую gdb для перетворення з шістнадцяткової у десяткову чи двійкову, що дуже зручно замість того, щоб відкривати калькулятор

    • p / d 0x10 -> дає десятковий еквівалент 0x10
    • p / t 0x10 -> двійковий еквівалент 0x10
    • p / x 256 -> шестнадцятковий еквівалент 256

4

Замість того, щоб запускати gdb з опцією -tui, щоб побачити дочірній процес, який містить екран, який підкреслює, де виконується рядок коду у вашій програмі, переходьте та вимкніть цю функцію за допомогою Cx o та Cx a. Це корисно, якщо ви використовуєте цю функцію, а якщо її тимчасово не використовувати, щоб ви могли скористатися стрілкою вгору, щоб отримати попередню команду.


2
ви можете змінити фокус на вікно команд, використовуючи focus cmdтак, щоб стрілки вгору / вниз працювали. Ви перемикаєтесь назад, використовуючи focus src.
Натан Фелман

3

Це може бути корисно, я впевнений, що це можна вдосконалити, але допоможе ласкаво просити:

define mallocinfo
  set $__f = fopen("/dev/tty", "w")
  call malloc_info(0, $__f)
  call fclose($__f)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.