本开发工具提供了可视化的对象检测、修改、调试功能 可以方便连接外部编辑器、启动 language server
组件检测器
可以检测引擎内所有组件、用户定义的脚本等 可以查看游戏对象的属性、资源、依赖关系等等
脚本调试器 / 动态切片(Slicer)
对我们的脚本可以调试执行,设置断点等。
出错时可用类似 program slicer 的动态后向切片,定位「哪些代码 / 渲染步骤导致了错误」:
- 调用栈:通过 Squirrel
sq_setnativedebughook+sq_stackinfos记录 Call/Return/Line - 数据流:采样局部变量变更,建立 Def→Use 到达定值边;出错点再对相关变量记 Use
- 后向切片:从错误点(及可疑变量)沿数据依赖与控制前驱回溯,得到相关源码位置
- 环形缓冲:默认最多保留 10 万条事件;满员后每新增 1 条就丢掉最旧 1 条(可用
setMaxEvents) - 渲染流程:
RenderFlow记录 Frame/Pass/Target/Bind/Draw;Exception构造时标记 Error,可切片到出错时所在 Pass 与绑定的资源
暂停 / 断点 / Watch / Snapshot
引擎视为无状态:可恢复的游戏状态都在脚本变量里。Debugger + Snapshot + DAP 服务在 --debug 下启用。
| 能力 | 说明 |
|---|---|
| Pause 键 | 帧级暂停:跳过 eve_update,仍渲染 / 泵事件(load.nut) |
| F5 | 暂停时继续执行到下一断点(continueRun) |
| F10 | 单步跳过:下一条语句,不进入函数(stepOver) |
| F11 | 单步进入:下一条语句,进入函数(stepInto) |
| F8 | 单步一帧(stepFrame,次要) |
| F6 / F7 | 保存 / 加载脚本状态快照 eve_snapshot.json |
| 断点 | Debugger::setBreakpoint 或 VS Code;命中时在 line hook 内阻塞 |
| Watch | addWatch / DAP evaluate;读 local 或 roottable(含 a.b) |
| Snapshot | JSON 序列化标记根(或 gameState / eve_state / 启发式非引擎槽) |
| MCP / AI | --mcp-port 嵌入 MCP;AiPanel 会话日志;F9 切换 ImGui「AI / MCP」面板 |
C++ API
eve::dev::CallGraph:脚本事件 +sliceBackward()/formatErrorReport()eve::dev::RenderFlow:渲染 Pass/Bind/Draw 图 + 后向切片(实现eve::debug::IRenderTracer)eve::debug::rt*(common/RenderTrace.h):Graphics 侧零开销钩子(未安装 tracer 时为空操作)eve::dev::Debugger:pause / step / breakpoints / watcheseve::dev::Snapshot:脚本状态 capture / restore / 文件eve::dev::DebugAdapter:DAP TCP(供 VS Code 插件连接)eve::dev::McpServer:MCP JSON-RPC TCP(AI Agent 测试 / 辅助开发)eve::dev::AiPanel:AI 会话日志;ImGui 绘制由ImGuiBackend注册(避免 EVDevTools 拉入 imgui.h)eve::dev::DevTool:attach+exposeScriptApi+ 可选startDap/startMcp
脚本 API(eve.dev,仅 --debug)
eve.dev.togglePause();
eve.dev.continueRun(); // F5 — continue to next breakpoint (`resume`/`continue` are Squirrel keywords)
eve.dev.stepOver(); // F10 — next statement, skip calls
eve.dev.stepInto(); // F11 — next statement, enter calls
eve.dev.stepOut(); // run until caller (DAP Shift+F11)
eve.dev.stepFrame(); // F8 — one game frame
eve.dev.step(); // convenience: stepOver mid-script, else one frame
eve.dev.setBreakpoint("main.nut", 42);
eve.dev.addWatch("score");
eve.dev.markStateRoot("gameState");
eve.dev.saveSnapshot("boss.json");
eve.dev.loadSnapshot("boss.json");
// AI / MCP (DevTools panel + agent session log)
eve.dev.ai.status();
eve.dev.ai.note("reached boss");
eve.dev.ai.toggleVisible(); // F9
使用方式
eve run --debug .
eve run --debug --dap-port=4711 .
eve run --debug --mcp-port=7529 .
eve run --debug --dap-port=4711 --mcp-port=7529 .
Cursor / Claude Desktop 通过 tools/eve-mcp 将 stdio MCP 桥到 --mcp-port。设计说明见 AI与MCP支持.md。
异常时 stderr 会打印脚本切片,以及(若有渲染事件):
- Active passes(如
RenderSystem2D/RenderSystem3D/ShadowPass) - Relevant render events(bind / draw / target)
VS Code 插件
见 tools/vscode-eve-debug/:type: eve 的 debug adapter,launch 时启动 eve run --debug --dap-port,attach 则连接已有进程。
桌面 Debug 构建链接 EVDevTools;Android / iOS 精简运行时不包含本模块(rt* 钩子保持空)。
language server
可以创建自动提示功能等,方便代码编写