Debugging-Hilfen für Streaming-Ausgabe, insbesondere wenn ein Provider Reasoning in normalen Text mischt.Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Runtime-Debug-Overrides
Verwenden Sie/debug im Chat, um nur zur Laufzeit geltende Konfigurations-Overrides festzulegen (Speicher, nicht Datenträger).
/debug ist standardmäßig deaktiviert; aktivieren Sie es mit commands.debug: true.
Das ist praktisch, wenn Sie seltene Einstellungen umschalten müssen, ohne openclaw.json zu bearbeiten.
Beispiele:
/debug reset löscht alle Overrides und kehrt zur Konfiguration auf dem Datenträger zurück.
Session-Trace-Ausgabe
Verwenden Sie/trace, wenn Sie Plugin-eigene Trace-/Debug-Zeilen in einer Session sehen möchten,
ohne den vollständigen ausführlichen Modus zu aktivieren.
Beispiele:
/trace für Plugin-Diagnosen wie Active Memory-Debug-Zusammenfassungen.
Verwenden Sie weiterhin /verbose für normale ausführliche Status-/Tool-Ausgabe und weiterhin
/debug für nur zur Laufzeit geltende Konfigurations-Overrides.
Plugin-Lifecycle-Trace
Verwenden SieOPENCLAW_PLUGIN_LIFECYCLE_TRACE=1, wenn Plugin-Lifecycle-Befehle langsam wirken
und Sie eine eingebaute Phasenaufschlüsselung für Plugin-Metadaten, Discovery, Registry,
Runtime-Mirror, Konfigurationsmutation und Aktualisierungsarbeit benötigen. Der Trace ist opt-in und schreibt
nach stderr, sodass JSON-Befehlsausgaben parsebar bleiben.
Beispiel:
pnpm build bevorzugt die gebaute
Runtime mit node dist/entry.js ... messen; pnpm openclaw ...
misst auch den Overhead des Source-Runners.
CLI-Start und Befehls-Profiling
Verwenden Sie den eingecheckten Start-Benchmark, wenn sich ein Befehl langsam anfühlt:OPENCLAW_RUN_NODE_CPU_PROF_DIR:
.cpuprofile für den
Befehl. Verwenden Sie dies, bevor Sie temporäre Instrumentierung zum Befehls-Code hinzufügen.
Bei Start-Hängern, die nach synchronem Dateisystem- oder Module-Loader-Verhalten aussehen,
fügen Sie das Sync-I/O-Trace-Flag von Node über den Source-Runner hinzu:
pnpm gateway:watch lässt dieses Flag standardmäßig für das überwachte
Gateway-Kind deaktiviert. Setzen Sie OPENCLAW_TRACE_SYNC_IO=1, wenn Sie im Watch-Modus ausdrücklich
Node-Sync-I/O-Trace-Ausgabe möchten.
Gateway-Watch-Modus
Für schnelle Iteration führen Sie den Gateway unter dem Datei-Watcher aus:openclaw-gateway-watch-main neu (oder eine profil-/portspezifische Variante wie
openclaw-gateway-watch-dev-19001) und verbindet interaktive Terminals automatisch.
Nicht interaktive Shells, CI und Agent-Exec-Aufrufe bleiben getrennt und geben stattdessen
Anweisungen zum Verbinden aus. Verbinden Sie sich bei Bedarf manuell:
--benchmark, bevor er den Gateway aufruft, und schreibt
pro Beenden eines Gateway-Kindprozesses eine V8-.cpuprofile unter
.artifacts/gateway-watch-profiles/. Stoppen oder starten Sie den überwachten Gateway neu, um
das aktuelle Profil zu flushen, und öffnen Sie es dann mit Chrome DevTools oder Speedscope:
--benchmark-dir <path>, wenn Sie Profile an einem anderen Ort möchten.
Verwenden Sie --benchmark-no-force, wenn das benchmarkte Kind die standardmäßige
--force-Portbereinigung überspringen und schnell fehlschlagen soll, falls der Gateway-Port bereits
belegt ist.
Der Benchmark-Modus unterdrückt Sync-I/O-Trace-Spam standardmäßig. Setzen Sie
OPENCLAW_TRACE_SYNC_IO=1 mit --benchmark, wenn Sie ausdrücklich sowohl CPU-Profile
als auch Node-Sync-I/O-Stack-Traces möchten. Im Benchmark-Modus werden diese Trace-Blöcke
unter dem Benchmark-Verzeichnis nach gateway-watch-output.log geschrieben und
aus dem Terminalbereich herausgefiltert; normale Gateway-Logs bleiben sichtbar.
Der tmux-Wrapper übernimmt gängige nicht geheime Runtime-Selektoren wie
OPENCLAW_PROFILE, OPENCLAW_CONFIG_PATH, OPENCLAW_STATE_DIR,
OPENCLAW_GATEWAY_PORT und OPENCLAW_SKIP_CHANNELS in den Bereich. Legen Sie
Provider-Zugangsdaten in Ihrem normalen Profil/Ihrer normalen Konfiguration ab, oder verwenden Sie den rohen Vordergrundmodus
für einmalige flüchtige Secrets.
Wenn der überwachte Gateway während des Starts beendet wird, führt der Watcher einmal
openclaw doctor --fix --non-interactive aus und startet das Gateway-Kind neu.
Verwenden Sie OPENCLAW_GATEWAY_WATCH_AUTO_DOCTOR=0, wenn Sie den ursprünglichen Startfehler
ohne den nur für die Entwicklung vorgesehenen Reparaturdurchlauf möchten.
Der verwaltete tmux-Bereich verwendet außerdem standardmäßig farbige Gateway-Logs für bessere Lesbarkeit;
setzen Sie FORCE_COLOR=0, wenn Sie pnpm gateway:watch starten, um ANSI-Ausgabe zu deaktivieren.
Der Watcher startet bei buildrelevanten Dateien unter src/, Plugin-Quelldateien,
Plugin-package.json- und openclaw.plugin.json-Metadaten, tsconfig.json,
package.json und tsdown.config.ts neu. Änderungen an Plugin-Metadaten starten den
Gateway neu, ohne einen tsdown-Rebuild zu erzwingen; Quell- und Konfigurationsänderungen
bauen weiterhin zuerst dist neu.
Fügen Sie Gateway-CLI-Flags nach gateway:watch hinzu; sie werden bei jedem Neustart
durchgereicht. Das erneute Ausführen desselben Watch-Befehls startet den benannten tmux-Bereich neu, und
der rohe Watcher behält weiterhin seine Single-Watcher-Sperre bei, sodass doppelte Watcher-Eltern
ersetzt werden, statt sich anzuhäufen.
Dev-Profil + Dev-Gateway (--dev)
Verwenden Sie das Dev-Profil, um Zustand zu isolieren und eine sichere, wegwerfbare Einrichtung zum
Debuggen zu starten. Es gibt zwei --dev-Flags:
- Globales
--dev(Profil): isoliert den Zustand unter~/.openclaw-devund setzt den Gateway-Port standardmäßig auf19001(abgeleitete Ports verschieben sich entsprechend). gateway --dev: weist den Gateway an, bei Bedarf eine Standardkonfiguration + einen Workspace automatisch zu erstellen (und BOOTSTRAP.md zu überspringen).
pnpm openclaw ... aus.
Was dies bewirkt:
-
Profilisolation (globales
--dev)OPENCLAW_PROFILE=devOPENCLAW_STATE_DIR=~/.openclaw-devOPENCLAW_CONFIG_PATH=~/.openclaw-dev/openclaw.jsonOPENCLAW_GATEWAY_PORT=19001(Browser/Canvas verschieben sich entsprechend)
-
Dev-Bootstrap (
gateway --dev)- Schreibt eine minimale Konfiguration, falls sie fehlt (
gateway.mode=local, bindet Loopback). - Setzt
agent.workspaceauf den Dev-Workspace. - Setzt
agent.skipBootstrap=true(kein BOOTSTRAP.md). - Legt die Workspace-Dateien an, falls sie fehlen:
AGENTS.md,SOUL.md,TOOLS.md,IDENTITY.md,USER.md,HEARTBEAT.md. - Standardidentität: C3-PO (Protokolldroide).
- Überspringt Channel-Provider im Dev-Modus (
OPENCLAW_SKIP_CHANNELS=1).
- Schreibt eine minimale Konfiguration, falls sie fehlt (
--dev ist ein globales Profil-Flag und wird von einigen Runnern geschluckt. Wenn Sie es ausdrücklich angeben müssen, verwenden Sie die Env-Var-Form:--reset löscht Konfiguration, Zugangsdaten, Sessions und den Dev-Workspace (mit
trash, nicht rm) und erstellt anschließend die Standard-Dev-Einrichtung neu.
Rohstream-Protokollierung (OpenClaw)
OpenClaw kann den rohen Assistenten-Stream vor jeder Filterung/Formatierung protokollieren. Dies ist der beste Weg, um zu sehen, ob Reasoning als Plain-Text-Deltas ankommt (oder als separate Thinking-Blöcke). Aktivieren Sie dies über die CLI:~/.openclaw/logs/raw-stream.jsonl
Raw-Chunk-Protokollierung (pi-mono)
Um rohe OpenAI-kompatible Chunks zu erfassen, bevor sie in Blöcke geparst werden, stellt pi-mono einen separaten Logger bereit:~/.pi-mono/logs/raw-openai-completions.jsonl
Hinweis: Dies wird nur von Prozessen ausgegeben, die den
openai-completions-Provider von pi-mono verwenden.
Sicherheitshinweise
- Rohstream-Logs können vollständige Prompts, Tool-Ausgabe und Benutzerdaten enthalten.
- Bewahren Sie Logs lokal auf und löschen Sie sie nach dem Debuggen.
- Wenn Sie Logs teilen, entfernen Sie zuerst Secrets und personenbezogene Daten.
Debugging in VSCode
Source Maps sind erforderlich, um Debugging in VSCode-basierten IDEs zu ermöglichen, weil viele der generierten Dateien im Rahmen des Build-Prozesses gehashte Namen erhalten. Die enthaltenenlaunch.json-Konfigurationen zielen auf den Gateway-Dienst, können aber schnell für andere Zwecke angepasst werden:
- Gateway neu bauen und debuggen - Debuggt den Gateway-Dienst nach dem Erstellen eines neuen Builds
- Gateway debuggen - Debuggt den Gateway-Dienst eines bereits vorhandenen Builds
Einrichtung
Die Standardkonfiguration Gateway neu bauen und debuggen ist sofort einsatzbereit; sie löscht automatisch den Ordner/dist und baut das Projekt mit aktiviertem Debugging neu:
- Öffnen Sie das Panel Run and Debug aus der Activity Bar oder drücken Sie
Ctrl+Shift+D - Stellen Sie in der IDE sicher, dass Gateway neu bauen und debuggen im Konfigurations-Dropdown ausgewählt ist, und drücken Sie dann die Schaltfläche Start Debugging
- Öffnen Sie ein Terminal und aktivieren Sie 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:
- Bauen Sie das Projekt im selben Terminal neu:
pnpm clean:dist && pnpm build - Wählen Sie in der IDE die Option Gateway debuggen im Konfigurations-Dropdown Run and Debug aus und drücken Sie dann die Schaltfläche Start Debugging
src/) setzen, und der Debugger ordnet Breakpoints über Source Maps korrekt dem kompilierten JavaScript zu. Sie können Variablen inspizieren, Code schrittweise ausführen und Call Stacks wie erwartet untersuchen.
Hinweise
- Wenn Sie die Option “Gateway neu bauen und debuggen” verwenden, wird bei jedem Start des Debuggers der Ordner
/distvollständig gelöscht und vor dem Start des Gateway ein vollständigerpnpm buildmit aktivierten Source Maps ausgeführt - Wenn Sie die Option “Gateway debuggen” verwenden, können Debug-Sessions jederzeit gestartet und gestoppt werden, ohne den Ordner
/distzu beeinflussen, aber Sie müssen einen separaten Terminalprozess verwenden, um sowohl Debugging zu aktivieren als auch den Build-Zyklus zu verwalten - Ändern Sie die
launch.json-Einstellungen fürargs, um andere Bereiche des Projekts zu debuggen - Wenn Sie die gebaute OpenClaw-CLI für andere Aufgaben verwenden müssen (z. B.
dashboard --no-open, falls Ihre Debug-Session ein neues Auth-Token erzeugt), können Sie sie in einem anderen Terminal alsnode ./openclaw.mjsausführen oder einen Shell-Alias wiealias openclaw-build="node $(pwd)/openclaw.mjs"erstellen