Конечно. Вот сжатая шпаргалка для **rust-gdb** (или чистого GDB), оптимизированная под твой стиль работы (терминал, эффективность, понимание процессов). ### 🚀 Запуск и База ```bash 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). Супер для поиска багов, когда "кто-то портит память". ### 💡 Пример сессии ```gdb # 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$