This commit is contained in:
Rorik Star Platinum 2025-12-28 19:00:03 +03:00
parent 48f640b55d
commit 440a2fa01f
28 changed files with 1849 additions and 96 deletions

View file

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