TursoDB调试技能Skill debugging

这个技能用于调试TursoDB数据库,通过字节码比较、日志记录、ThreadSanitizer压力测试、确定性模拟和腐败分析等工具,确保SQLite兼容性和数据库完整性,适用于软件开发中的数据库测试和问题排查。关键词:TursoDB调试、数据库测试、字节码分析、日志追踪、ThreadSanitizer、模拟重现、腐败检测、SQLite兼容性、后端调试。

测试 0 次安装 0 次浏览 更新于 3/25/2026

name: debugging description: 如何使用字节码比较、日志记录、ThreadSanitizer、确定性模拟和腐败分析工具调试TursoDB

调试指南

字节码比较流程

Turso旨在与SQLite兼容。当行为不同时:

1. 在sqlite3中EXPLAIN查询
2. 在tursodb中EXPLAIN查询
3. 比较字节码
   ├─ 不同 → 代码生成中的错误
   └─ 相同但结果不同 → VM或存储层中的错误

示例

# SQLite
sqlite3 :memory: "EXPLAIN SELECT 1 + 1;"

# Turso
cargo run --bin tursodb :memory: "EXPLAIN SELECT 1 + 1;"

手动查询检查

cargo run --bin tursodb :memory: 'SELECT * FROM foo;'
cargo run --bin tursodb :memory: 'EXPLAIN SELECT * FROM foo;'

日志记录

# 在测试期间跟踪核心
RUST_LOG=none,turso_core=trace make test

# 输出到testing/test.log
# 警告:每次测试运行可能达兆字节

线程问题

使用ThreadSanitizer进行压力测试:

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

确定性模拟

使用种子重现错误。注意:模拟器使用遗留的“limbo”命名。

# 模拟器
RUST_LOG=limbo_sim=debug cargo run --bin limbo_sim -- -s <seed>

# Whopper (并发DST)
SEED=1234 ./testing/concurrent-simulator/bin/run

架构参考

  • 解析器 → 从SQL字符串生成AST
  • 代码生成器 → 从AST生成字节码
  • 虚拟机 → 执行SQLite兼容的字节码
  • 存储层 → B树操作,分页

腐败调试

对于WAL腐败和数据库完整性问题,使用scripts中的腐败调试工具。

详细用法请参阅references/CORRUPTION-TOOLS.md