返回市场
LLDB-MCP服务器

LLDB-MCP服务器

作者:stass64 星标更新:2025-03-27

项目介绍

LLDB-MCP

截图

在这里查看自动调试缓冲区溢出的实际操作:https://x.com/full_duplex/status/1904770477698277847

概述

LLDB-MCP 是一个将 LLDB 调试器与 Claude 的模型上下文协议 (MCP) 集成的工具。这种集成允许 Claude 直接启动、控制和与 LLDB 调试会话进行交互,从而实现 AI 辅助的调试工作流程。

该工具提供了一整套用于处理 LLDB 的命令,包括:

  • 启动和管理 LLDB 会话
  • 加载程序以进行调试
  • 设置断点和观察点
  • 控制程序执行
  • 查看内存、寄存器和变量
  • 分析堆栈跟踪和程序状态

功能

  • 创建和管理多个 LLDB 调试会话
  • 加载可执行文件并附加到正在运行的进程
  • 加载核心转储文件以进行事后分析
  • 执行任意 LLDB 命令
  • 对程序执行进行细粒度控制
  • 内存检查和反汇编
  • 线程和堆栈帧检查

安装

  1. 克隆仓库:

    git clone https://github.com/stass/lldb-mcp.git
    cd lldb-mcp
    
  2. 安装依赖项:

    pip install mcp
    
  3. 配置 Claude 使用 LLDB-MCP 服务器:

    • 打开 Claude 桌面应用配置
    • 在您的 MCP 配置中添加以下内容:
    "mcpServers": {
      "lldb-mcp": {
        "command": "python3",
        "args": ["/path/to/lldb-mcp/lldb_mcp.py"],
        "disabled": false
      }
    }
    

使用方法

安装并配置后,您可以使用自然语言通过 Claude 与 LLDB 进行交互。

基本工作流程

  1. 启动一个新的 LLDB 会话
  2. 加载一个程序
  3. 设置断点
  4. 运行程序
  5. 检查变量和内存
  6. 控制执行(继续、单步、下一步等)
  7. 当完成时终止会话

示例命令

这里有一些如何通过 Claude 与 LLDB-MCP 进行交互的例子:

  • "启动一个新的 LLDB 会话"
  • "加载程序 '/path/to/executable'"
  • "在 main 处设置断点"
  • "运行程序"
  • "显示回溯"
  • "打印变量 'count' 的值"
  • "跳过下一行"
  • "检查地址 0x1000 处的内存"
  • "显示寄存器值"
  • "继续执行"
  • "杀死进程"
  • "终止 LLDB 会话"

支持的命令

会话管理

  • lldb_start: 启动一个新的 LLDB 会话
  • lldb_terminate: 终止 LLDB 会话
  • lldb_list_sessions: 列出所有活跃的 LLDB 会话

程序加载

  • lldb_load: 将程序加载到 LLDB 中
  • lldb_attach: 附加到正在运行的进程
  • lldb_load_core: 加载核心转储文件

执行控制

  • lldb_run: 运行已加载的程序
  • lldb_continue: 继续程序执行
  • lldb_step: 单步到下一行或指令
  • lldb_next: 跳过函数调用
  • lldb_finish: 执行直到当前函数返回
  • lldb_kill: 杀死正在运行的进程

断点和观察点

  • lldb_set_breakpoint: 设置断点
  • lldb_breakpoint_list: 列出所有断点
  • lldb_breakpoint_delete: 删除断点
  • lldb_watchpoint: 在变量或内存地址上设置观察点

检查

  • lldb_backtrace: 显示调用堆栈
  • lldb_print: 打印表达式的值
  • lldb_examine: 检查内存
  • lldb_info_registers: 显示寄存器
  • lldb_frame_info: 获取关于堆栈帧的详细信息
  • lldb_disassemble: 反汇编代码
  • lldb_process_info: 获取关于当前进程的信息

线程管理

  • lldb_thread_list: 列出当前进程中的所有线程
  • lldb_thread_select: 选择特定线程

其他

  • lldb_command: 执行任意 LLDB 命令
  • lldb_expression: 在当前帧中评估表达式
  • lldb_help: 获取 LLDB 命令的帮助

示例程序

example/overflow.c 包含一个示例 C 程序,当传递某些参数时会导致缓冲区溢出。 使用 cc overflow.c 编译它,并请求 Claude 调试生成的程序:

我试图调试我的程序 a.out,当传递 "hello" 参数时它会崩溃。
你能帮我调试吗?

调试技巧

  • 当需要执行没有专用函数的 LLDB 命令时,请使用 lldb_command
  • 启动服务器时使用 --debug 标志启用详细日志记录
  • 会话会在服务器关闭时自动清理
  • 每个会话都有一个唯一的 ID - 执行命令时确保使用正确的 ID

要求

  • Python 3.7+
  • 系统上安装了 LLDB
  • 支持 MCP 的 Claude 桌面应用

故障排除

  • 如果 LLDB 命令超时,请检查 LLDB 是否正确安装
  • 启动新会话时验证 LLDB 的路径
  • 检查附加到进程时的权限问题
  • 如果命令未正确执行,请查看调试日志

许可证

BSD 2条款