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

75 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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