執行階段除錯覆寫
/debug 會設定僅限執行階段的設定覆寫(記憶體中,不寫入磁碟)。預設停用;使用 commands.debug: true 啟用。
/debug reset 會清除所有覆寫,並回到磁碟上的設定。
工作階段追蹤輸出
/trace 會顯示單一工作階段中由外掛擁有的追蹤/除錯行,而不啟用完整詳細模式。可用於外掛診斷,例如主動記憶除錯摘要;一般狀態/工具輸出請使用 /verbose。
外掛生命週期追蹤
設定OPENCLAW_PLUGIN_LIFECYCLE_TRACE=1,即可逐階段拆解外掛中繼資料、探索、登錄、執行階段鏡像、設定變更與重新整理工作。輸出會寫入 stderr,因此 JSON 命令輸出仍可解析。
pnpm build 後用 node dist/entry.js ... 測量已建置的執行階段;pnpm openclaw ... 也會測量原始碼執行器的額外開銷。
命令列介面啟動與命令效能分析
已納入版本控制的啟動基準測試:OPENCLAW_RUN_NODE_CPU_PROF_DIR:
.cpuprofile。在向命令程式碼加入暫時檢測前,請先使用這個方法。
對於看起來像同步檔案系統或模組載入器工作的啟動停滯,請透過原始碼執行器加入節點的同步 I/O 追蹤旗標:
pnpm gateway:watch 會預設對受監看閘道子程序停用此旗標;如果你也想在 watch 模式中取得同步 I/O 追蹤輸出,請設定 OPENCLAW_TRACE_SYNC_IO=1。
閘道 watch 模式
openclaw-gateway-watch-<profile> 的 tmux 工作階段(例如 openclaw-gateway-watch-main);只有在 OPENCLAW_GATEWAY_PORT 不同於預設連接埠 18789 時,才會加入像 openclaw-gateway-watch-dev-19001 這樣的連接埠後綴。它會從互動式終端自動附加;非互動式 shell、CI 與 agent exec 呼叫會保持分離,並改為列印附加指示:
--benchmark,並在 .artifacts/gateway-watch-profiles/ 下,於每次閘道子程序結束時寫入一個 V8 .cpuprofile。停止或重新啟動受監看的閘道以 flush 目前 profile,然後用 Chrome DevTools 或 Speedscope 開啟:
--benchmark-dir <path>:將 profile 寫到其他位置。--benchmark-no-force:略過預設的--force連接埠清理;如果閘道連接埠已被使用,則快速失敗。
OPENCLAW_TRACE_SYNC_IO=1 搭配 --benchmark 設定,即可同時取得 CPU profile 與同步 I/O 堆疊追蹤;在基準測試模式中,這些追蹤區塊會寫入基準測試目錄下的 gateway-watch-output.log(從終端窗格過濾掉),而一般閘道記錄仍會可見。
tmux 包裝器會將常見的非機密執行階段選擇器帶入窗格,包括 OPENCLAW_PROFILE、OPENCLAW_CONFIG_PATH、OPENCLAW_STATE_DIR、OPENCLAW_GATEWAY_PORT 與 OPENCLAW_SKIP_CHANNELS。請將提供者憑證放在你的正常 profile/設定中,或針對一次性短暫秘密使用原始前景模式。
如果受監看的閘道在啟動期間結束,watcher 會執行一次 openclaw doctor --fix --non-interactive,並重新啟動閘道子程序。設定 OPENCLAW_GATEWAY_WATCH_AUTO_DOCTOR=0,即可在不經過僅限開發用途修復流程的情況下查看原始啟動失敗。
受管理的 tmux 窗格預設會顯示彩色閘道記錄;啟動 pnpm gateway:watch 時設定 FORCE_COLOR=0 可停用 ANSI 輸出。
watcher 會在 src/ 下與建置相關的檔案、extension 原始碼檔案、extension package.json 與 openclaw.plugin.json 中繼資料、tsconfig.json、package.json 以及 tsdown.config.ts 變更時重新啟動。Extension 中繼資料變更會重新啟動閘道而不強制重新建置;原始碼與設定變更仍會先重新建置 dist。
在 gateway:watch 後加入閘道命令列介面旗標,它們會在每次重新啟動時傳遞下去。重新執行相同的 watch 命令會重生具名 tmux 窗格;原始 watcher 會保留單一 watcher 鎖,因此重複的 watcher 父程序會被取代,而不是不斷累積。
開發 profile + 開發閘道(—dev)
有兩個不同的--dev 旗標:
- 全域
--dev(profile): 將狀態隔離到~/.openclaw-dev下,並將閘道連接埠預設為19001(衍生連接埠也會隨之位移)。 gateway --dev: 告訴閘道在缺少設定與工作區時自動建立預設設定 + 工作區(並略過 bootstrap)。
pnpm openclaw ... 執行命令列介面。
這會執行以下操作:
-
Profile 隔離(全域
--dev)OPENCLAW_PROFILE=devOPENCLAW_STATE_DIR=~/.openclaw-devOPENCLAW_CONFIG_PATH=~/.openclaw-dev/openclaw.jsonOPENCLAW_GATEWAY_PORT=19001(browser/canvas 連接埠會相應位移)
-
開發 bootstrap(
gateway --dev)- 如果缺少設定,寫入最小設定(
gateway.mode=local,綁定 local loopback)。 - 將
agents.defaults.workspace設為開發工作區,並將agents.defaults.skipBootstrap=true。 - 如果缺少工作區檔案,會植入:
AGENTS.md、SOUL.md、TOOLS.md、IDENTITY.md、USER.md。 - 預設身分:C3-PO(協定機器人)。
pnpm gateway:dev也會設定OPENCLAW_SKIP_CHANNELS=1以略過通道提供者。
- 如果缺少設定,寫入最小設定(
--dev 是全域 profile 旗標,且會被某些執行器吃掉。如果你需要明確寫出來,請使用環境變數形式:--reset 會清除設定、憑證、工作階段與開發工作區(移到垃圾桶,而不是刪除),然後重新建立預設開發設定。
原始串流記錄
OpenClaw 可以在任何過濾/格式化前記錄原始助理串流。這是查看 reasoning 是否以純文字 delta 抵達(或以獨立 thinking 區塊抵達)的最佳方式。 透過命令列介面啟用:~/.openclaw/logs/raw-stream.jsonl
安全注意事項
- 原始串流記錄可能包含完整提示、工具輸出與使用者資料。
- 將記錄保留在本機,並在除錯後刪除。
- 如果你分享記錄,請先清除秘密與 PII。
在 VSCode 中除錯
因為建置會雜湊產生的檔名,所以需要 source maps。隨附的launch.json 會以閘道服務為目標:
- 重新建置並除錯閘道 - 在啟動閘道前刪除
/dist,並以啟用除錯的方式重新建置。 - 除錯閘道 - 在不碰
/dist的情況下除錯現有建置。
設定
- 開啟 Run and Debug(Activity Bar,或
Ctrl+Shift+D)。 - 選取 重新建置並除錯閘道,然後按下 Start Debugging。
- 在終端中啟用 source maps:
- Linux/macOS:
export OUTPUT_SOURCE_MAPS=1 - Windows(PowerShell):
$env:OUTPUT_SOURCE_MAPS="1" - Windows(CMD):
set OUTPUT_SOURCE_MAPS=1
- Linux/macOS:
- 重新建置:
pnpm clean:dist && pnpm build - 選取 除錯閘道,然後按下 Start Debugging。
src/ TypeScript 檔案中設定中斷點;除錯器會透過 source maps 將它們對應到已編譯的 JavaScript。
注意事項
- 重新建置並除錯閘道 會刪除
/dist,並在每次啟動時以 source maps 執行完整pnpm build。 - 除錯閘道 可以在不影響
/dist的情況下啟動/停止,但你需要在另一個終端管理建置循環。 - 編輯
launch.json的args可除錯其他命令列介面子命令。 - 若要將已建置的命令列介面用於其他任務(例如你的除錯工作階段產生新的 auth token 時使用
dashboard --no-open),請從另一個終端執行:node ./openclaw.mjs,或使用類似alias openclaw-build="node $(pwd)/openclaw.mjs"的別名。