sync
This commit is contained in:
parent
48f640b55d
commit
440a2fa01f
28 changed files with 1849 additions and 96 deletions
75
20-dev/00-rust/50-rust-gdb/cheat-sheet.md
Normal file
75
20-dev/00-rust/50-rust-gdb/cheat-sheet.md
Normal 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$
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue