# VST trace — runtime-gated diagnostic logging `src/audio/VSTTrace.h` defines a `VST_TRACE(...)` macro the addon, the VST host code, and the sandbox subprocess all use to emit lines into `%TEMP%\slopsmith-vst-trace-.log` (Linux/macOS: `/tmp/slopsmith-vst-trace-.log`) and stderr. The filename is per-PID so concurrent runs (e.g. addon spawning a sandbox subprocess) each get their own log without interleaving. It's compiled into every build but no-ops at runtime unless the `SLOPSMITH_SANDBOX_DEBUG` environment variable is set to a non-empty value other than `"0"`. The first call caches the env var, so flipping the variable mid-process has no effect — set it before launching the host process (`node ...`, `electron ...`, or the sandbox subprocess via the parent's environment). ## What you'll see when it's enabled * `[ctrl] ...` — control-channel framing from `ControlChannel.cpp` (`ConnectNamedPipe`, `readFrame got N bytes`, `event: ready`, error codes). * Sandbox subprocess startup steps from `slopsmith-vst-host.exe`: `args ok`, `audio shm opened`, `control pipe connected`, `plugin loaded: `, `sending ready event`. * `LoadVST: path='...'`, `SubprocessHandle.start: spawned pid=N`, the full CreateProcess command line. * `VSTHost.loadPlugin / VST3ComponentHolder.initialise` host-callback traces from the JUCE VST3 host context (in-process load path only). The sandbox host also opens a per-PID file at `%TEMP%\slopsmith-vst-host-.log` **unconditionally** — this is by design and intentionally not gated on `SLOPSMITH_SANDBOX_DEBUG`. The sandbox subprocess runs hidden (no console window) and can die before the env var has propagated, so an always-on per-PID file is the only reliable way to diagnose "the subprocess died and I have no console" crashes in the field. The file is small (a handful of lines per session), written from a single process, and rotates per PID so they cap naturally. ## Turning it on ```cmd :: Windows — set before launching node / electron / the desktop app: set SLOPSMITH_SANDBOX_DEBUG=1 node load-gr6.js ``` ```bash # macOS / Linux: SLOPSMITH_SANDBOX_DEBUG=1 node load-gr6.js ``` ## Reading the log The `` portion is the OS process ID of the writer — find your most recent run via `dir %TEMP%\slopsmith-vst-trace-*.log` (Windows) or `ls -t /tmp/slopsmith-vst-trace-*.log | head` (POSIX). ```cmd :: Windows — view the most recently modified trace file: for /f "delims=" %f in ('dir /b /o-d %%TEMP%%\slopsmith-vst-trace-*.log') do @type "%%TEMP%%\%f" & exit /b ``` ```bash # macOS / Linux cat "$(ls -t /tmp/slopsmith-vst-trace-*.log | head -1)" ``` Per-PID naming means files accumulate over time. Clean up periodically with `del %TEMP%\slopsmith-vst-trace-*.log` (Windows) or `rm /tmp/slopsmith-vst-trace-*.log` (POSIX) when they're no longer needed.