调试回放服务器

一个基于MCP协议的服务器,提供控制和与Mozilla的rr调试器交互的工具,支持AI助手和其他MCP客户端以编程方式回放执行轨迹和运行GDB命令。

  • by neog24
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 neog24/rr-mcp-server

使用说明

rr-mcp服务器

MCP(模型上下文协议)服务器,提供用于控制和与Mozilla交互的工具 RR (录制和回放)调试器。这使得AI助手和其他MCP客户端能够以编程方式重放执行跟踪并运行GDB命令。

特性

  • 重播管理:启动并管理rr重放会话,以记录执行跟踪
  • GDB命令执行:在重播会话期间运行任意GDB/rr命令
  • HTTP接口:用于远程调试控制的RESTful API
  • 异步通信:GDB机器接口(MI)协议的强大异步处理
  • 会话管理:在跟踪之间切换时自动清理

先决条件

  • Python 3.12或更高版本
  • rr调试器 已安装并在PATH中可用
  • 记录的执行痕迹(使用创建 rr record)

安装

使用紫外线(推荐)

uv sync

使用pip

pip install -e .

用法

启动服务器

python rr_mcp_server.py

服务器将于启动 http://0.0.0.0:8000.

MCP工具

服务器通过MCP协议公开了两个工具:

1. rr_replay

启动或重新启动给定跟踪目录的重播会话。

参数:

  • rr_trace_dir (str):包含rr跟踪的目录的路径

退货:

  • 成功时为空字符串,失败时显示错误消息

例子:

rr_replay("/home/user/.local/share/rr/my-trace")

2. run_cmd

在活动重放会话期间执行GDB/rr命令。

参数:

  • cmd (str):要执行的GDB/rr命令

退货:

  • 命令执行结果为字符串

例子:

run_cmd("continue")
run_cmd("break main")
run_cmd("backtrace")

运作原理

建筑

  1. RR控制器 (rr_controller.py):一个包裹 pygdbmi.GdbController 管理rr重放会话并处理GDB/MI协议通信
  2. RRMCP服务器 (rr_mcp_server.py):基于FastMCP的服务器,将RRController功能作为MCP工具公开

GDB机器接口

服务器使用GDB机器接口(MI3)协议与rr通信,该协议提供结构化的、机器可解析的输出。响应是JSON对象 type 和 message 领域。

会话生命周期

  1. 客户电话 rr_replay 带有跟踪目录
  2. 服务器启动 rr replay -i=mi 子进程
  3. 客户可以致电 run_cmd 多次与重播进行交互
  4. 开始新的重播会自动退出上一个会话

记录痕迹

在使用此服务器之前,您需要使用rr记录执行跟踪:

# Record a program
rr record ./your-program arg1 arg2

# The trace will be saved to ~/.local/share/rr/latest-trace
# or you can specify a custom location

日志记录

服务器使用 loguru 用于日志记录:

  • 日志被写入 server.log 在当前目录中
  • 调试级日志也会写入stderr
  • 记录GDB/MI协议消息以进行故障排除

工作流示例

# 1. Start a replay session
rr_replay("~/.local/share/rr/my-app-trace")

# 2. Continue execution
run_cmd("continue")

# 3. Set a breakpoint
run_cmd("break some_function")

# 4. Continue to breakpoint
run_cmd("continue")

# 5. Inspect variables
run_cmd("print my_variable")

# 6. Get backtrace
run_cmd("backtrace")

# 7. Step through code
run_cmd("next")
run_cmd("step")

# 8. Reverse execution (rr's superpower!)
run_cmd("reverse-continue")
run_cmd("reverse-step")

用例

  • 自动调试:让AI助手帮助调试记录的故障
  • 碰撞分析:程序化分析CI/CD管道中的崩溃
  • 测试调试:自动调查片状测试失败
  • 远程调试:调试生产记录,无需手动GDB交互

依赖项