从编辑到运行
在 Theseus 中,“已经保存”“已经构建”和“设备正在使用新版本”是三件不同的事。记住这条边界,能避免最常见的“明明改了,为什么现场没有变化”。
为什么需要知道
编辑器可以始终保留最新设计,而运行目标可能仍在使用上一次部署的版本。AI 写入文件、编辑器预览刷新,也不代表正在运行的对象树已经替换。理解生命周期,可以帮助你选择 Build、Run、Debug 或 Stop,而不是反复保存和刷新。
何时会遇到
以下情况都需要判断当前处于哪一层:
- AI 或你自己修改了 Page、Graph、Object、Script、PLC 或模块设置;
- Navbar 显示 Build、Run、Debug、Pause、Continue 或 Stop;
- 使用本机或远端 Runtime target;
- 系统提示 runtime 尚未加载、构建产物过期,或必须先停止应用;
- 编辑器中的内容与运行页表现不一致。
六个关键概念
| 阶段 | 发生了什么 | 不会发生什么 |
|---|---|---|
| 编辑态 | 你和 AI 修改当前 App 的设计源文件;编辑器读模型和诊断随保存刷新 | 不会自动替换正在运行的对象树 |
| Build | 检查源文件并生成 Graph、自定义代码、页面方法或 PLC 等运行产物,同时准备 runtime package | 不会启动 App,也不会执行设备动作 |
| Deploy | 把桌面端准备好的 runtime package 发送到当前 Runtime target | 不会自动代表 App 已经开始运行 |
| Materialize | Runtime target 把已部署版本加载到内存,准备对象、模块和运行所需状态 | 不会启动正常或调试生命周期 |
| Run | 按需完成构建、部署和加载后,以正常模式启动 App | 不启用 Graph 断点调试 |
| Debug | 按需完成构建、部署和加载后,以调试模式启动 App | 不会跳过真实设备动作或自动保证流程正确 |
可以把它理解为:
编辑并保存 → Build → Deploy → Materialize → Run 或 Debug
你通常不需要手工逐个执行全部步骤。桌面端的 Run 和 Debug 会按需准备运行产物并部署到当前目标;显式 Build 适合在启动前先检查问题。某些在线配置、诊断或状态信息会提到 Materialize,它表示“运行时已经加载”,不是“应用已经启动”。
编辑态与运行态的边界
- 保存后,编辑器看到的是最新设计;已部署的运行页仍以目标上的 runtime package 为准。
- 编辑器预览可能立即刷新,但这不能证明远端 Runtime target 已经收到新版本。
- Graph、自定义代码和 PLC 等修改需要有效的构建产物。Run/Debug 会检查这些产物,失败时不会启动。
- Object、模块配置和其他运行模型的修改,要在 App 安全停止后,通过下一次 Materialize、Run 或 Debug 进入新的运行实例。
- Running、Debugging、Paused、Starting 或 Stopping 时,不会替换当前运行对象树。 需要先 Stop,再构建或启动新版本。
- Debug 的 Paused 仍然占用运行时。此时可以 Continue 或 Stop,不能把它当成已经停止。
什么时候用哪个动作
| 目标 | 使用动作 |
|---|---|
| 只想检查 Graph、代码或 PLC 是否可以生成运行产物 | Build |
| 正常验证画面和设备流程 | Run |
| 需要断点、暂停、查看变量和逐步定位 Graph 问题 | Debug |
| 应用正在运行,需要让新的运行模型生效 | Stop,然后 Run 或 Debug |
| 只需要让已部署版本进入内存供在线能力使用 | Materialize;通常由相关操作按需触发 |
开始前先确认 Navbar 中选择的是正确的 Runtime target。本机和远端目标拥有不同的已部署版本、运行状态和账号会话。
常见误解
- Build 不等于 Run。 构建成功只说明运行产物可以生成。
- Materialize 不等于 Run。 它加载运行时,但不启动正常生命周期。
- Stopped 不一定表示从未加载。 App 可以已经 Materialize,但生命周期仍是 Stopped。
- 保存不等于部署。 AI 或人工保存只更新编辑态,运行目标仍需显式运行流程。
- 切到远端目标不会把编辑器搬到远端。 你的 App 源文件仍在桌面端,远端只是当前执行目标。
- 运行页看起来正常,不代表 Debug 已通过。 关键流程仍要覆盖正常、异常和超时分支。