TRACE32调试控制协议

一个将Lauterbach TRACE32调试器控制功能暴露给AI助手的模型上下文协议(MCP)服务器,支持通过自然语言进行调试操作。

  • by hsoffar
  • Python
  • 本地部署
  • 38 星标
  • 更新于
在 GitHub 查看 hsoffar/lauterbach-trace32-mcp

使用说明

洛特巴赫-曲马多

A. 模型上下文协议(MCP) 暴露的服务器 劳特巴赫TRACE32 调试器控件作为人工智能的工具 助理(克劳德、GPT-4等)。

连接后,您的AI助手可以通过自然方式控制实时TRACE32会话 语言:设置断点、读取寄存器、检查内存、遍历代码、运行 练习脚本等。


特性

12个类别的51个工具:

类别 工具
连接 connect, disconnect, ping, get_state, get_message
执行控制 go, break_, step, step_asm, step_hll, step_over, go_up, go_return
实践 run_command, evaluate_function, run_practice_script
记忆 read_memory, read_memory_typed, write_memory_typed
登记簿 read_register, read_all_registers, write_register
断点 set_breakpoint, list_breakpoints, delete_breakpoint
变量 read_variable, write_variable
符号 query_symbol_by_name, query_symbol_by_address
实践宏 get_practice_macro, set_practice_macro
复合/高级 get_context, get_source_location, evaluate_expression, get_system_info, read_string, dump_memory_formatted, write_memory, backtrace, disassemble, set_breakpoint_at_symbol, run_until, snapshot, list_functions, list_global_variables, search_memory
文件 list_trace32_docs, search_trace32_docs
外围设备(PER) list_per_files, load_per_file, per_read_register

MCP资源:

  • trace32://docs/<filename> --带文本提取的TRACE32 PDF文档
  • trace32://hints --用户提供的调试提示

结构化错误处理 为每个TRACE32提供可操作的建议 异常类型。

内置服务器说明 教授LLM TRACE32概念:目标状态, 地址类、调试符号要求、常见工作流和有用的实践 功能。

非阻塞自动连接启动 --服务器立即向MCP客户端注册 并在后台自动连接到TRACE32。如果TRACE32未运行, 服务器保持可用,您可以稍后通过 connect 工具。


先决条件

  • Python 3.10或更高版本
  • 劳特巴赫TRACE32 随着 远程应用程序接口 启用
  • lauterbach-trace32-rcl Python包(pyrcl)——通过pip安装:
    pip install lauterbach-trace32-rcl
    

启用TRACE32远程API

将以下内容添加到TRACE32启动脚本中(config.t32 或同等):

RCL=NETASSIST
PACKLEN=1024
PORT=20000

进行此更改后重新启动TRACE32。


安装

来自GitHub

pip install git+https://github.com/hsoffar/lauterbach-trace32-mcp.git

来源(可编辑)

git clone https://github.com/hsoffar/lauterbach-trace32-mcp.git
cd lauterbach-trace32-mcp
pip install -e .

使用紫外线

uv tool install git+https://github.com/hsoffar/lauterbach-trace32-mcp.git

用法

直接运行

# Connect to TRACE32 on localhost:20000 (default)
lauterbachdebugger-mcp

# Custom host/port
lauterbachdebugger-mcp --host 192.168.1.100 --port 20000

# With TRACE32 installation path and user hints
lauterbachdebugger-mcp --t32-dir ~/t32 --hints ~/.trace32-hints.md

# Verbose logging
lauterbachdebugger-mcp -v

# Or via Python module
python -m lauterbachdebugger_mcp

CLI选项

选项 短 环境变量 默认 描述
--host -H T32_HOST localhost TRACE32主机名或IP
--port -p T32_PORT 20000 远程API端口
--protocol T32_PROTOCOL TCP TCP 或 UDP
--timeout T32_TIMEOUT 60.0 连接超时(秒)
--t32-dir T32SYS ~/t32 TRACE32安装目录(C:\T32\ 在Windows上)
--hints T32_HINTS 提示文件或目录(请参见 代理商.md 公约)
--cache-dir T32_CACHE_DIR ~/.cache/lauterbach-t32-mcp PDF到文本缓存目录
--verbose -v off 重复以获取更多详细信息(-vv)

客户端配置

克劳德代码

claude mcp add --transport stdio lauterbach-trace32 \
  --env T32_HOST=localhost \
  --env T32_PORT=20000 \
  --env T32SYS=~/t32 \
  --env T32_HINTS=/path/to/hints.md \
  -- lauterbachdebugger-mcp

或使用 python -m (不需要路径):

claude mcp add --transport stdio lauterbach-trace32 \
  --env T32_HOST=localhost \
  --env T32_PORT=20000 \
  -- python -m lauterbachdebugger_mcp

克劳德桌面版

编辑 %APPDATA%\Claude\claude_desktop_config.json (Windows)或 ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):

{
  "mcpServers": {
    "lauterbach-trace32": {
      "command": "lauterbachdebugger-mcp",
      "env": {
        "T32_HOST": "localhost",
        "T32_PORT": "20000",
        "T32_PROTOCOL": "TCP",
        "T32SYS": "~/t32",
        "T32_HINTS": "/path/to/hints.md"
      }
    }
  }
}

VS代码/光标/风帆

添加 .vscode/mcp.json 在您的工作区(或用户设置)中:

{
  "servers": {
    "lauterbach-trace32": {
      "type": "stdio",
      "command": "lauterbachdebugger-mcp",
      "env": {
        "T32_HOST": "localhost",
        "T32_PORT": "20000",
        "T32SYS": "~/t32",
        "T32_HINTS": "/path/to/hints.md"
      }
    }
  }
}

OpenAI代理SDK(Codex)

from agents import Agent, MCPServerStdio
import asyncio

async def main():
    async with MCPServerStdio(
        command="lauterbachdebugger-mcp",
        env={"T32_HOST": "localhost", "T32_PORT": "20000"},
    ) as server:
        agent = Agent(name="debugger", mcp_servers=[server])
        # agent is now aware of all TRACE32 tools

asyncio.run(main())

工具参考

连接

connect

连接到TRACE32调试器。如果后台自动连接仍然存在 挂起或失败,取消并重新连接。使用CLI默认值 当省略参数时。

参数 类型 默认值 说明
node 字符串 localhost 主机名或IP
port 整数 20000 远程API端口
protocol TCP UDP TCP
timeout 编号 60.0 超时时间(秒)

disconnect

断开与调试器的连接并释放资源。

ping

验证连接是否处于活动状态。

get_state

将当前调试状态返回为 { state: int, state_name: string }.

值 名称 含义
0 stopped 目标已停止/未运行
1 running 目标运行
2 halted 在断点处停止
3 background_running 在后台模式下运行

get_message

返回TRACE32消息行中显示的最后一条消息,如下所示 { text, type }.


执行控制

所有执行控制工具都返回包含PC、函数名称、, 操作完成后显示源代码、源文件和源代码行。

工具 说明
go 开始/恢复执行
break_ 停止执行
step 单步(HLL或ASM,取决于上下文)
step_asm 单个装配说明步骤
step_hll 单源级(HLL)步骤
step_over 跳过函数调用
go_up 运行直到从当前函数返回
go_return 立即从当前功能返回

练习命令和脚本

run_command

执行任何TRACE32 PRACTICE命令字符串。

run_command("SYStem.Up")
run_command("Data.dump 0x20000000")
run_command("Register.Set PC 0x0")

evaluate_function

计算PRACTICE函数表达式并返回结果。

evaluate_function("STATE.RUN()")
evaluate_function("Register(PC)")
evaluate_function("Var.VALUE(myVar)")

run_practice_script

运行CMM脚本文件(阻塞)。

参数 类型 必填 说明
script_path string yes 路径和可选参数,例如。 C:/init.cmm arg1
timeout number no 等待秒数;省略无限期等待

记忆

read_memory

读取原始字节。退货 { address, length, hex, ascii }.

参数 类型 说明
address string 例如。 0x20000000 或 D:0x1000 (带访问类)
length integer 字节数

read_memory_typed

读取类型化标量值。

参数 类型 说明
address string 目标地址
type 字符串 int8 uint8 int16 uint16 int32 uint32 int64 uint64 float double
byteorder 字符串 little (默认)或 big

write_memory_typed

写一个类型化标量值。参数与 read_memory_typed 加 value.


寄存器

read_register

按名称读取单个寄存器。退货 { name, unit, core, value }.

参数 类型 说明
name string 例如。 PC, SP, LR, R0
core integer 核心编号(可选,适用于多核)

read_all_registers

读取所有寄存器,可选择按以下方式过滤 core 和 unit (CPU, FPU, VPU).

write_register

将值写入寄存器。


断点

set_breakpoint

参数 类型 默认值 说明
address string -- 例如。 0x08000100
type 字符串 PROGRAM PROGRAM READ WRITE RW
impl 字符串 AUTO AUTO SOFT ONCHIP HARD MARK
size integer -- 大小(字节)(可选)
core integer -- 核心(可选)
enabled 布尔值 true 是否启用

返回断点地址处具有符号解析的丰富响应。

list_breakpoints

返回包含符号信息的当前设置的所有断点的列表。

delete_breakpoint

删除给定位置的断点 address.


变量

read_variable

按名称读取源代码级变量。需要加载调试符号。

read_variable("myGlobalVar")
read_variable("myModule\\myStaticVar")

write_variable

将值写入源代码级变量。接受整数或浮点数。


符号

query_symbol_by_name

按名称查找函数、变量或标签。退货 { name, path, address, size }.

query_symbol_by_address

在给定的目标地址查找符号。


实践宏

get_practice_macro

获取全局PRACTICE宏变量的当前值(不带前导 &).

set_practice_macro

设置全局PRACTICE宏变量的值。


复合/高级工具

这些工具将多个TRACE32操作组合成一个上下文丰富的单一操作 响应。所有使用优雅降级——子操作中的部分失败 不要破坏整体结果。

get_context

完整CPU上下文快照:状态、PC、SP、LR、当前功能、源位置、, 以及CPU名称。可选的 core 多核目标的参数。

get_source_location

地址的源文件和行(默认为当前PC)。

evaluate_expression

计算C/C++表达式。返回值、类型和十六进制表示。 支持 format 参数: decimal, hex,或 string.

get_system_info

目标系统信息:CPU名称、系列、端序、电源状态、目标状态。

read_string

从目标内存中读取以null结尾的C字符串。可选的 max_length (默认值为256)。

dump_memory_formatted

十六进制+ASCII内存转储(如 hexdump).可选的 length (默认值为256)。

write_memory

将原始字节(十六进制字符串)写入目标内存。

backtrace

遍历调用堆栈并返回具有源分辨率的帧信息。 可选的 depth (默认值为20)。

disassemble

在某个地址(默认为PC)上拆卸说明。可选的 count (默认值10)。

set_breakpoint_at_symbol

按函数或标签名称设置断点(例如。 main).

run_until

运行到有超时的地址或符号。使用临时断点。 可选的 timeout 以秒为单位(默认值为10)。

snapshot

完整状态捕获:上下文+回溯+断点列表+系统信息。 可选的 include_registers (默认为false)。

list_functions

浏览功能符号。可选的 filter (通配符), limit (默认值为100)。

list_global_variables

浏览全局变量符号。参数与 list_functions.

search_memory

在内存范围内搜索字节模式。

参数 类型 说明
start_address string 搜索范围的开始
end_address string 搜索范围结束
pattern string 十六进制字节模式,例如。 DEADBEEF

文档工具

list_trace32_docs

列出T32安装中可用的TRACE32 PDF文档文件。 可选的 category 过滤器(例如。 debugger, rtos, practice).

search_trace32_docs

按关键字搜索文档文件名。


外围寄存器工具

list_per_files

列表可用 .per T32安装中的(外围设备描述)文件。 从中提取标题 ; @Title: 在文件头中添加注释。 可选的 filter 用于子字符串匹配。

load_per_file

通过以下方式将PER文件加载到TRACE32中 PER.Program 命令。路径可以是绝对的 或者相对于T32安装目录。

per_read_register

读取并解码外围寄存器值。需要先加载PER文件。

参数 类型 默认值 说明
address string -- 注册地址
access_width 字符串 long byte, word,或 long

MCP资源

文件(trace32://docs/<filename>)

T32安装中的每个PDF pdf/ 目录作为MCP公开 资源。读取时,服务器使用以下命令提取文本 pdftotext 如果可用, 否则返回文件路径。

用户提示(trace32://hints)

从加载的用户提供的调试提示 --hints-dir 和 --hints-file. 提示在启动时自动嵌入MCP服务器指令中, 因此LLM立即看到它们,而无需任何额外的获取。他们也是 可用作MCP资源(trace32://hints)在会议中途重读。

通过MCP客户端中的CLI标志或环境变量配置提示 config(见下面的示例)。

提示文件格式

使用调试提示创建markdown文件:

# My TRACE32 Debugging Tips

## I2C Debugging
When debugging I2C on our custom board, always check the pull-up
resistor configuration first. Use PER.view with the I2C peripheral
file to verify SCL/SDA pin muxing.

## Flash Programming Workflow
1. Run SYStem.Up to connect
2. Load flash algorithm: FLASH.Create ...
3. Program: FLASH.Program ALL /Erase
4. Verify: Data.LOAD.ELF <file> /ComPare

根据您的提示,向服务器指示 --hints-file 或 --hints-dir:

lauterbachdebugger-mcp --hints-file ~/.trace32-hints.md
lauterbachdebugger-mcp --hints-dir ~/.trace32-hints/

错误处理

服务器提供结构化错误响应,并提供可操作的建议 对于每种TRACE32异常类型:

例外 建议
未连接 呼叫 connect 工具优先
CommandError 检查命令语法
FunctionError 功能可能不存在或目标未停止
MemoryReadAccessError 停止目标,检查地址/访问类
MemoryWriteAccessError 区域可以是只读的或受保护的
VariableError 确保调试符号已加载且目标已停止
SymbolError 确保加载调试符号
RegisterError 停止目标,检查注册名称
ApiConnectionError 连接丢失,请尝试重新连接
BreakpointError 检查地址和断点类型

发展

git clone https://github.com/hsoffar/lauterbach-trace32-mcp.git
cd lauterbach-trace32-mcp

# Install with dev dependencies
pip install -e ".[dev]"
# or with uv
uv sync --group dev

# Run tests
pytest

# Lint & type-check
ruff check src/
pyright src/

许可证

麻省理工学院——见 许可证.