洛特巴赫-曲马多
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/--带文本提取的TRACE32 PDF文档trace32://hints--用户提供的调试提示
结构化错误处理 为每个TRACE32提供可操作的建议 异常类型。
内置服务器说明 教授LLM TRACE32概念:目标状态, 地址类、调试符号要求、常见工作流和有用的实践 功能。
非阻塞自动连接启动 --服务器立即向MCP客户端注册 并在后台自动连接到TRACE32。如果TRACE32未运行, 服务器保持可用,您可以稍后通过 connect 工具。
______________________________________________________________________
先决条件
- Python 3.10或更高版本
- 劳特巴赫TRACE32 随着 远程应用程序接口 启用
lauterbach-trace32-rclPython包(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_mcpCLI选项
| 选项 | 短 | 环境变量 | 默认 | 描述 |
|---|---|---|---|---|
--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, bytes[], 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/)
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 /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/______________________________________________________________________
许可证
麻省理工学院——见 许可证.
