Skip to content

Debugging

  • Logs: the app uses env_logger with the default filter info,jack=off, printed to the terminal that started it. Set RUST_LOG=debug (or RUST_LOG=daw_engine=debug) for more. Plug-in load failures and missing audio files are logged as errors; autosaves at info level; plug-in restart flags at debug level.
  • Frontend errors: a failed command shows its error as a toast (report in api.ts). The app replaces the webview’s right-click menu with its own.
  • Blank window on Linux: some GPU drivers need WEBKIT_DISABLE_DMABUF_RENDERER=1. Leave it unset otherwise, because WebKit then paints on the CPU at much higher cost.
  • Wayland: main.rs sets GDK_BACKEND=x11 unless you set it yourself, because plug-in editors are X11 windows and GLX-based ones fail when GTK runs natively on Wayland in the same process. Set GDK_BACKEND=wayland to override (plug-in GUIs may then fail to open).
  • Audio problems: the status line shows the device, rate and buffer; Settings › Audio shows the measured latencies. cargo run -p daw-engine --example hosts lists what cpal sees. The tick carries an overruns counter that grows when a recording ring buffer overflowed.
  • Engine errors: a panic inside Engine::process is caught in the audio callback, the block is silenced, EngineStatus::engine_errors counts it, and a toast asks for a report; the panic message and backtrace are in the terminal (RUST_BACKTRACE=1). A plug-in putting out NaNs or runaway levels is contained and named in a toast (bad_audio_warning).
  • “System overload”: the callbacks ran late for more than 60 ms in a row, so the engine shed load and the session stopped the transport (EngineStatus::overloads). The CPU meter in the control bar shows how close you are: Tick.cpu is the average, cpu_peak the worst recent block and late_blocks the blocks over 100%, a single one of which is a dropout but no overload (BlockLoad in dsp/status.rs). All of them are one thread’s load, so they won’t match a system monitor. fx_bench --release times the built-in effects; the audio thread runs with flush-to-zero, so denormals are not the cause.
  • Plug-ins: cargo run -p vst3-host --example probe -- <name> loads and runs plug-ins outside the app. Settings › Plug-ins shows the last scan’s report, including bundles that crashed or timed out. The cache is plugins.json in the config folder; delete it (or use Rescan) to force a new scan.
  • Settings and projects: settings.json and recent.json are in ~/.config/marbble ($XDG_CONFIG_HOME/marbble, %APPDATA%\marbble on Windows). A project is plain JSON in project.json; it is safe to read, and editing it by hand works if the app is closed.
  • Engine state: everything the UI knows is in the Snapshot (getState().snap in src/store.ts) and the last Tick (currentTick()); a headless example is usually the quickest way to check what the engine does.
  • Never test with your real projects folder: headless checks write into the scratch directory you pass; keep it away from ~/Music/Marbble.