debugging — скилл для Claude Code: что делает и как установить
Скилл по отладке tursodb: сравнить байткод с SQLite, включить трейс-логи, прогнать ThreadSanitizer, воспроизвести баг по seed и замерить стек.
npx skills add tursodatabase/turso --skill debugging -a claude-codeЧто делает debugging
Скилл ведёт отладку tursodb, движка Turso на Rust, который повторяет поведение SQLite. Первый ход: сравнить байткод через EXPLAIN в sqlite3 и в cargo run --bin tursodb. Байткод расходится — ошибка в генерации кода. Если совпал, а ответы разные, копайте виртуальную машину и слой хранения.
Логи включаются как RUST_LOG=none,turso_core=trace make test, вывод идёт в testing/test.log и быстро разрастается. Многопоточные баги ловят стресс-тестами под ThreadSanitizer: понадобится nightly-тулчейн через rustup toolchain install nightly и rustup override set nightly. Воспроизвести падение помогает симулятор: RUST_LOG=limbo_sim=debug cargo run --bin limbo_sim -- -s <seed>, для конкурентных сценариев есть testing/concurrent-simulator/bin/run.
В scripts/stack/ лежат три скрипта: размер кадра функции, минимальный стек под SQL-файл, профиль самых глубоких вызовов под lldb; у каждого есть -h со всеми опциями. Замеры стека берите только с release-сборки cargo build --release --bin tursodb — в debug слоты не переиспользуются, и цифры ничего не скажут о том, что запускают пользователи. Разбор повреждений WAL описан в references/CORRUPTION-TOOLS.md. Симулятор всё ещё держит старое имя «limbo», так что это не опечатка.
Какие задачи решает
- сравнить байткод запроса в sqlite3 и tursodb и найти место расхождения
- поймать гонку в многопоточном сценарии под ThreadSanitizer
- воспроизвести падение по seed в детерминированном симуляторе
- измерить минимальный стек, на котором выживает глубоко вложенное выражение
- разобрать повреждение WAL и проверить целостность базы
Примеры запросов агенту
- Сравни байткод `EXPLAIN SELECT 1 + 1;` в sqlite3 и tursodb и скажи, где он расходится
- Воспроизведи этот баг симулятором с seed 1234 и объясни, на каком шаге ломается
- Сними размеры кадров для `translate::expr::` на release-сборке и покажи самые толстые
Как установить debugging
1Через Skills CLI (Vercel)
npx skills add tursodatabase/turso --skill debugging -a claude-code2Вручную: положить файлы
~/.claude/skills/debugging/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/debugging/
1Через Skills CLI (Vercel)
npx skills add tursodatabase/turso --skill debugging -a codex2Вручную: положить файлы
.agents/skills/debugging/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add tursodatabase/turso --skill debugging -a cursor2Вручную: положить файлы
.cursor/skills/debugging/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install tursodatabase/turso debugging2Вручную: положить файлы
.github/skills/debugging/SKILL.md1Через Skills CLI (Vercel)
npx skills add tursodatabase/turso --skill debugging -a gemini-cli2Командой платформы
gemini skills install https://github.com/tursodatabase/turso --path .claude/skills/debuggingВручную: положить файлы
.devin/skills/debugging/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add tursodatabase/turso --skill debugging -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
Из того же набора10
Весь набор →Похожие
Вопросы о debugging
Как установить debugging в Claude Code?
Выполните npx skills add tursodatabase/turso --skill debugging -a claude-code, файл скилла появится в ~/.claude/skills/debugging/SKILL.md.
Что делает скилл debugging?
Описывает отладку tursodb: сравнение байткода с SQLite, трейс-логи ядра, стресс-тесты под ThreadSanitizer, детерминированную симуляцию по seed и замеры стека скриптами из scripts/stack/.
Что нужно для запуска под ThreadSanitizer?
Nightly-тулчейн: rustup toolchain install nightly, затем rustup override set nightly. Дальше стресс-тест запускается через cargo run -Zbuild-std --target x86_64-unknown-linux-gnu -p turso_stress.
Исходный текст
SKILL.md · MIT
--- name: debugging description: How to debug tursodb using Bytecode comparison, logging, ThreadSanitizer, deterministic simulation, and corruption analysis tools --- # Debugging Guide ## Bytecode Comparison Flow Turso aims for SQLite compatibility. When behavior differs: ``` 1. EXPLAIN query in sqlite3 2. EXPLAIN query in tursodb 3. Compare bytecode ├─ Different → bug in code generation └─ Same but results differ → bug in VM or storage layer ``` ### Example ```bash # SQLite sqlite3 :memory: "EXPLAIN SELECT 1 + 1;" # Turso cargo run --bin tursodb :memory: "EXPLAIN SELECT 1 + 1;" ``` ## Manual Query Inspection ```bash cargo run --bin tursodb :memory: 'SELECT * FROM foo;' cargo run --bin tursodb :memory: 'EXPLAIN SELECT * FROM foo;' ``` ## Logging ```bash # Trace core during tests RUST_LOG=none,turso_core=trace make test # Output goes to testing/test.log # Warning: can be megabytes per test run ``` ## Threading Issues Use stress tests with ThreadSanitizer: ```bash rustup toolchain install nightly rustup override set nightly cargo run -Zbuild-std --target x86_64-unknown-linux-gnu \ -p turso_stress -- --vfs syscall --nr-threads 4 --nr-iterations 1000 ``` ## Deterministic Simulation Reproduce bugs with seed. Note: simulator uses legacy "limbo" naming. ```bash # Simulator RUST_LOG=limbo_sim=debug cargo run --bin limbo_sim -- -s <seed> # Whopper (concurrent DST) SEED=1234 ./testing/concurrent-simulator/bin/run ``` ## Stack Usage Parsing and translating an expression recurse once per level of nesting, so the stack frame size of those functions limits how deep an expression can be. Three scripts in `scripts/stack/` measure stack use. Use a release build (`cargo build --release --bin tursodb`): debug builds do not reuse stack slots, so their frames say little about what users run. Run each script with `-h` for all options. ```bash # Frame size of each function, read from its prologue. -c compares two binaries. scripts/stack/frame-sizes.sh 'translate::expr::' scripts/stack/frame-sizes.sh -c /tmp/tursodb-main 'translate_expr$' 'parse_expr_inner$' # Smallest stack that runs a SQL script, per binary. -S adds sqlite3. scripts/stack/min-stack.sh -S -b /tmp/tursodb-main -b target/release/tursodb deep.sql # Which functions use the stack at the deepest point (runs under lldb). scripts/stack/stack-profile.sh deep.sql ``` Functions that recurse per level should be small. Move rare and large paths into `#[inline(never)]` helpers, like SQLite's `SQLITE_NOINLINE`. ## Architecture Reference - **Parser** → AST from SQL strings - **Code generator** → bytecode from AST - **Virtual machine** → executes SQLite-compatible bytecode - **Storage layer** → B-tree operations, paging ## Corruption Debugging For WAL corruption and database integrity issues, use the corruption debug tools in [scripts](./scripts). See [references/CORRUPTION-TOOLS.md](./references/CORRUPTION-TOOLS.md) for detailed usage.
© tursodatabase · MIT · tursodatabase/turso