dsh-iar-cspy:在 DSH 对话里编译与调试 IAR 工程

前言

做 ARM 嵌入式时,IAR Embedded Workbench 仍是不少团队的日常环境:.ewp 工程、iarbuild、C-SPY 模拟器或探针调试,大多在 IDE 里点选完成。若在 DeepSeek Harness(DSH)里让 agent 参与「读工程、编译、看变量、跟调用栈」,单靠模型描述接口往往不够;需要的是把官方调试后端接到 MCP,并在 DSH 里配好路径与 Python 环境。

下面介绍社区插件 dsh-iar-cspy(维护者 Wazy-XD):它把官方 IAR C-SPY MCP Server 打成 DSH bundle,附带配置页、iar-cspy 技能与 iar-launch.ps1 等脚本,便于在对话中驱动构建与 C-SPY 会话。

这是什么

dsh-iar-cspy 当前文档版本为 0.0.2,分类为工作流类 DSH 插件(MIT 许可证)。安装后向 profile 插入两条行:iar-cspy(Host 插件)与 iar-cspy-mcp(MCP client)。agent 可通过约 83 个 mcp__iar__* 官方工具编译 .ewp、启动模拟器或硬件上的 C-SPY,并查看变量、寄存器、内存、调用栈与目标输出。IAR 安装路径、MCP 所用 Python、临时目录与调用超时可在 DSH 插件配置页设置;留空字段会按 README 描述的顺序自动探测。

上游 Python 包 iar-cspy、iar-cspy-mcp 由 scripts\setup.ps1 安装到 %LOCALAPPDATA%\dsh-iar-cspy 下的私有 venv;bundle 运行时不会执行 pip。

核心功能

MCP 工具与技能

  • 构建与工程:project_*、projectmanager_call 等,用于加载工程与增量构建。
  • 调试与会话:debugger_* 配置并启动会话、运行控制与状态查询。
  • 断点与观察:breakpoints_* 管理断点、观察点、日志点。
  • 上下文与符号:contextmanager_*、symbols_* 查看栈、局部变量与符号。
  • 内存与反汇编:memory_*、disassembly_*、sourcelookup_*。
  • 目标 I/O 与跟踪:libsupport_*、listwindow_*,以及 ide_services_* 等兜底能力。

iar-cspy 技能面向用户与模型:对话中出现 IAR、EWARM、C-SPY、.ewp/.eww、iarbuild 等关键词时会自动加载,内容含工具地图、构建/调试流程、launch JSON 写法、EWARM 9.60.2 限制与安全提示。

配置与运维

  • 配置入口:DSH 侧边栏 Plugins → dsh-iar-cspy,表单在组件列表上方;保存后 MCP 连接自动重载,无需重启 DSH。
  • iar_cspy_status:返回实际解析的 iarPath、mcpPython、tempDir、toolCallTimeoutMs、stateDir 及缺失项,便于排查「工具未连上」。
  • 独立 C-SPY 后端:会话由插件自有 MCP 进程驱动,不依赖已打开的 IAR IDE 窗口;断线后按 1 秒到 30 秒退避重连(最多 50 次),启动失败不会让 DSH 整体报错。

launch JSON 辅助

scripts\iar-launch.ps1 从 .ewp 与 linker map 生成 launch JSON,可带上 --cpu、--fpu、端序与 semihosting,并支持覆盖 driver、program 与 driverOptions。

前置条件

  1. Windows。IAR C-SPY 后端与 EWARM 仅有 Windows 版。
  2. 已安装 IAR Embedded Workbench for Arm;安装根目录下须存在 common\bin\CSpyServer2.exe 与 common\bin\IarServiceLauncher.exe。README 写明在 EWARM 9.60.2(IAR IDE Platform 9.3.5)上完整验证。
  3. 运行 setup.ps1 需要 Python 3.10+、Git(或使用 -CspyPySource / -CspyMcpSource 跳过 Git)及访问 GitHub/PyPI 的网络。
  4. 私有 venv 与临时目录应位于非沙箱工作区的可写路径,默认 %LOCALAPPDATA%\dsh-iar-cspy。

安装与启用

DSH 以当前进程权限运行插件;安装前建议在 GitHub 仓库 查阅源码与 MIT 许可证,并仅在受信任的环境执行 setup.ps1。

1. 安装 bundle

在 DSH 中通过 npm 安装(README 推荐方式):

plugin_manager install_bundle target=dsh-iar-cspy

需固定版本时可写:

plugin_manager install_bundle target=dsh-iar-cspy@0.0.2

也可从 GitHub Release 的 tgz(.../releases/download/v0.0.2/dsh-iar-cspy-0.0.2.tgz)或本地 tgz 安装。完成后 profile 会出现 iar-cspy 与 iar-cspy-mcp 两行。

2. 准备 MCP 的 Python 环境

bundle 只负责启动 MCP,不负责安装 Python 包。先定位已安装包内的 setup.ps1 并执行一次:

$setup = Get-ChildItem "$env:USERPROFILE\.dsh\profiles\*\node_modules\dsh-iar-cspy\scripts\setup.ps1" |
    Select-Object -First 1
& $setup.FullName

脚本会在 %LOCALAPPDATA%\dsh-iar-cspy\venv 创建 venv,安装 thriftpy2、mcp 及官方 iar-cspy、iar-cspy-mcp,并写入 config.json。若未探测到 IAR,可指定安装根目录:

& $setup.FullName -IarPath 'C:\Program Files\IAR Systems\Embedded Workbench 9.60'

插件配置页还提供 安装 / 更新 MCP 按钮,等价于运行上述 setup;也可在配置里将 mcpPython 指向自管环境(须已安装 iar-cspy 与 iar-cspy-mcp)。

3. 在 DSH 里填写配置

字段 作用 留空时
iarPath IAR 安装根目录 查 IAR_INSTALL_PATH、config.json、常见目录
mcpPython 启动 MCP 的 python.exe config.json 或默认 venv 下的解释器
tempDir MCP 的 TEMP/TMP %LOCALAPPDATA%\dsh-iar-cspy\tmp
toolCallTimeoutMs 单次工具调用超时(毫秒) 600000(10 分钟)
extraArgs 追加到 MCP 启动命令的参数 空

MCP 启动命令等价于:

<mcpPython> -m iar_cspy_mcp --iar-path <iarPath> [extraArgs]

4. 确认连接

让 agent 调用 iar_cspy_status,或在对话中询问连接状态。当 configured 为 true,且 mcpPythonExists、iarExecutables 均为 true 时,mcp__iar__* 工具应可用。若列表仍无 IAR 工具,可重新加载插件或新开会话。

典型用法

对话示例

README 给出的问法包括:

  • 用 IAR 编译并调试某路径下的 app.ewp,Debug 配置。
  • 在模拟器中运行并在 main 处停下,读取 printf 输出。
  • 指定 J-Link 与芯片型号,生成 launch 配置并启动。

构建

在 EWARM 9.60.2 上加载工程常用 projectmanager_call 的 LoadEwpFile,再调用 project_build:

projectmanager_call(method="LoadEwpFile", args_json='["D:\work\app\app.ewp", true]')
project_build(project_path="D:\work\app\app.ewp", config_name="Debug", num_parallel_builds=4, max_output_lines=40)

构建失败时结果为 ok=false,应查看 data.succeeded 与 data.output_tail。大工程可把 toolCallTimeoutMs 调高。全量重建或清理可在外部调用 iarbuild.exe 的 -build / -clean。

调试与 launch JSON

推荐顺序:先构建 → 用 iar-launch.ps1 生成 JSON → debugger_configure_and_start_session(launch_json=...) → 用各类 debugger/context/memory 工具观察 → debugger_stop_session 结束。

生成 launch JSON 示例:

& "$env:LOCALAPPDATA\dsh-iar-cspy\bin\iar-launch.ps1" `
    -Project 'D:\work\app\app.ewp' -Configuration Debug

硬件安全:调试会暂停、复位或烧写真实硬件;在不熟悉的板子上操作前应确认目标,会话结束应主动关闭。

适用场景与注意

适合已在 Windows 上使用 IAR EWARM、并希望在 DSH agent 工作流里完成「加载工程 → 编译 → C-SPY 调试 → 读内存/栈/输出」的开发者。不适合未安装 IAR、或非 Windows 的环境。

与官方 IAR VS Code 扩展的能力对照见仓库内 PARITY.md。社区目录 skillhub.cn 上的 dsh-iar-cspy 页 与 GitHub 仓库相互独立索引,并非 DeepSeek 或幻方官方应用商店。

结尾

dsh-iar-cspy 把官方 IAR C-SPY MCP 接到 DSH:配置页管路径与超时,技能补流程知识,iar-launch.ps1 减轻 launch JSON 手写成本。按 README 安装 bundle、运行 setup、保存配置并检查 iar_cspy_status 后,即可在对话里驱动 IAR 构建与调试。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜