hyperion/20-dev/00-rust/50-rust-gdb/cheat-sheet.md
2025-12-28 19:00:03 +03:00

4.4 KiB
Raw Permalink Blame History

Конечно. Вот сжатая шпаргалка для 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