4.4 KiB
4.4 KiB
Конечно. Вот сжатая шпаргалка для rust-gdb (или чистого GDB), оптимизированная под твой стиль работы (терминал, эффективность, понимание процессов).
🚀 Запуск и База
rust-gdb target/debug/my_app # Запуск с отладочными символами
rust-gdb --args target/debug/my_app arg1 arg2 # Запуск с аргументами
🎮 Управление (Control Flow)
| Команда | Сокр. | Описание |
|---|---|---|
run |
r |
Запустить программу с начала |
continue |
c |
Продолжить выполнение до следующей точки |
next |
n |
Шагнуть через (выполнить строку, не заходя в функции) |
step |
s |
Шагнуть внутрь (зайти внутрь функции на этой строке) |
finish |
fin |
Выполнить функцию до конца и вернуться на уровень выше |
quit |
q |
Выйти из GDB |
🛑 Точки останова (Breakpoints)
| Команда | Описание |
|---|---|
break main |
Остановиться на входе в main |
break 42 |
Остановиться на строке 42 текущего файла |
break utils.rs:15 |
Остановиться в файле utils.rs на строке 15 |
break is_prime if n == 13 |
Условный брейкпоинт (остановиться, только если n = 13) |
info break |
Показать список всех точек |
delete 1 |
Удалить точку останова номер 1 |
clear |
Удалить точку на текущей строке |
🕵️ Инспекция данных
| Команда | Сокр. | Описание |
|---|---|---|
print x |
p |
Вывести значение переменной x |
print/x x |
p/x |
Вывести в HEX (шестнадцатеричном) виде |
print/t x |
p/t |
Вывести в BIN (двоичном) виде (полезно для битмасок!) |
display x |
Автоматически выводить x при каждом шаге |
|
undisplay 1 |
Перестать следить (по ID из info display) |
|
info locals |
Показать все локальные переменные в текущем скоупе | |
ptype x |
Показать точный тип переменной x |
🖥 Визуальный режим (TUI)
Это то, что делает GDB похожим на IDE в терминале.
Ctrl + X,A(или командаlayout src) — Включить TUI (код + консоль).Ctrl + X,2— Добавить окно ассемблера (код + asm + консоль).Ctrl + L— Перерисовать экран (если поплыл вывод).Up/Down— Скролить код (пока фокус на коде).Ctrl + P/Ctrl + N— История команд (как в bash).
🛠 Продвинутые фишки
backtrace(bt): Показать стек вызовов (кто вызвал эту функцию). Критично при панике.frame 2(f 2): Прыгнуть в стек-фрейм #2 (в функцию, которая вызвала текущую), чтобы посмотреть её переменные.set var x = 10: Изменить значение переменной прямо во время выполнения (для тестов "а что если").watch x: Остановиться, когда значениеxизменится (hardware watchpoint). Супер для поиска багов, когда "кто-то портит память".
💡 Пример сессии
# 1. Ставим брейк на функцию
b miller_rabin
# 2. Запускаем
r
# 3. Включаем красивый вид
layout src
# 4. Смотрим аргумент
p n
# 5. Идем по шагам
n
n
# 6. Заходим в mod_pow
s
# 7. Смотрим биты степени
p/t exp
X \cdot X \cdot X \dots