BKPT LabsDOCS/VIEWALYZER/THE WORKSPACE VIEWALYZER · GPUI EDITION
VIEWALYZER · USER GUIDE

The workspace

Layout

The window: the settings sidebar on the left, the top bar with one card per view and the capture capsule in the middle, and the dock filling the rest.
THE WINDOW: THE SETTINGS SIDEBAR ON THE LEFT, THE TOP BAR WITH ONE CARD PER VIEW AND THE CAPTURE CAPSULE IN THE MIDDLE, AND THE DOCK FILLING THE REST

The sidebar holds every setting. The top bar holds one card per view and the capture capsule. The dock is where views live. The log sidebar on the right opens with the panel icon at the far right of the top bar. Both sidebars can be dragged wider or narrower at their inner edge.

The sidebar

The sidebar: Connection open, the Trace Domains section with its installed domains, the other sections collapsed.
THE SIDEBAR: CONNECTION OPEN, THE TRACE DOMAINS SECTION WITH ITS INSTALLED DOMAINS, THE OTHER SECTIONS COLLAPSED

Sections open and close independently. A field's value is saved as soon as you leave it; a dropdown applies on pick. Fields that do not apply to the current choice are hidden (J-Link fields under ST-Link, SWO fields under RAM Buffer, and so on).

Connection

Probe type, serial, target device, interface and speed, and the network / serial parameters. Reset on Connect decides between recording from boot and attaching to the running firmware. Load Config / Save Config read and write .vacf files. Described field by field in Getting started, step 3.

Software Trace

The firmware-side recorder: the Trace Source (RAM Buffer, RTT, SWO) with its addresses, COBS framing for UDP / serial, and Take Snapshot for reading the RAM ring out of an untethered board. Live Trace Mode and Trace Tuning only are kept for settings compatibility and have no effect in this version: a capture always streams live. Trace Clock (MHz) and SWO Freq (kHz) appear only for SWO. RAM Buffer and RTT carry the recorder clock in the trace stream.

Hardware Trace

The ARM Data Watchpoint and Trace unit and the ITM, which need no firmware support at all. Hidden for non-ARM targets, with a note saying why. One switch chooses how much of it you want (the whole section, with the reasons and the pin budget, is the Hardware trace page):

FIELD MEANING
Profiling SourceOff; Sampling: a rough profile with no setup (program-counter samples only, at the lightest interval; on-chip over the SWO pin when the core and the trace source allow it, polled over the debug port otherwise; the Profile line says which and at what rate); On-chip trace: every source the core has, with the controls below.
CPU Clock (MHz)Appears only when RAM Buffer or RTT PC sampling polls the debug port. It converts the selected cycle interval into a polling rate; normal recorder timestamps do not use it.
DWT Data PathAuto, Debug-port polling (forces the polled profile; the SWO-borne sources are off) or SWO pin.
PC Sample IntervalOn-chip trace only. The hardware grid from 64 to 16384 cycles; the Interval Rate line shows the sample rate at the configured CPU clock and the share of the SWO pin it takes, and names the entries the pin cannot carry at the current baud.
DWT Exception TraceInterrupt enter / exit / return from the hardware, independent of the firmware's ISR hooks. Feeds the Exception Trace view.
Counter: ...The six DWT event counters (each wraps every 256 counted cycles). Feed the Event Counters view; the Sleep counter gives a measured CPU load. The Cycle event shares its timer with PC sampling and is refused while sampling is on.
DWT Watch AddressesOne data watch per DWT comparator (four on most cores), `name@0xADDR[:size][:data-rwdata-rdata-wpcaddress][:pc]; a bare 0xADDR:4` is a write-only value watch. Feed the Data Trace view.
ITM Ports / Privilege / TimestampsThe stimulus-port mask (bit n = port n; port 0 carries printf and the recorder's port is always added), the privilege mask, and the local timestamp prescaler. Port text lands in the ITM Console.
Trace Port ProtocolNRZ. Manchester is listed so you can see it is not supported, and says so when picked.
SWO Budget / SWO LoadAn estimate of the pin load from everything enabled (assumed event rates are printed with it), and the measured load: live while recording, the last capture's afterwards.

Every control the core lacks stays visible but disabled, with the reason next to it (no cycle counter, no trace packets, a Cortex-M0+, a non-SWO trace source). The whole section, control by control, with the reasons and the pin budget, is the Hardware trace page.

Trace Domains

Installed domain descriptors, each with an on / off toggle (an enabled domain applies to every recording), a gear that opens it in the Domain Editor, and a delete button with a confirmation. Domains that bundle a live instrument show their parameters here. Load Domain File installs a .vadomain; Load Domain Package installs a folder.

General

FIELD MEANING
Sticky CursorA click in the Timeline, a chart, or the Timers and Comms timelines pins the shared cursor; click the same spot again to release it.
Live History (sec)No effect in this version.
Toolbar LabelsNo effect in this version.
Verbose logsNo effect in this version.
GPU RenderingLinux only; no effect in this version.
Full SyncNo effect in this version: the zoom window is always shared between views.
Cursor SyncNo effect in this version: the cursors are always shared between views.
Load Full Trace After StreamNo effect in this version.

The settings marked "no effect" are kept so a settings file saved by an earlier version loads unchanged.

ELF / Symbols

ELF File (used by Symbols, Memory, Profiler, Timers, Overview), MAP File, and Source Root, the checkout the Profiler's Source view resolves file names against when the recorded paths are not on this machine.

Tools

Paths to external tools: the ARM toolchain and GDB, the J-Link install (when the SEGGER software is somewhere the app does not look), and the vacore_capture probe tool. Nothing here is needed for a normal native capture.

License & Updates and Support

The license status line says what licenses this machine and, when nothing does, what that costs: without a license ViewAlyzer runs in free mode (captures capped at 5 s with a 5 s cooldown between them, the first 10 task/ISR lanes, symbol polling up to 4 symbols at 100 Hz). Enter a key and press Activate License to bind this machine to it (needs the internet once; the license then works offline and refreshes itself when connected), or Install License File for a partner-issued viewalyzer-oem.license, which never contacts our server. Licensed To, Tier and Updates Until appear once a license is in force; Deactivate License releases this machine's seat so the key can move to another. Check for Updates asks what the newest build is (reporting only; a partner install is answered by the partner). The Support section links to email support, the documentation site and the website, or to whatever a partner's license file names instead.

The top bar and the capsule

The top bar: one card per view around the capsule.
THE TOP BAR: ONE CARD PER VIEW AROUND THE CAPSULE

One card per view, in this order: Settings (shows / hides the sidebar), Theme (cycles Dark, Graphite, Light), then Table, Trace, CPU, Timeline, Comms, Timers, Profiler, Overview, Symbols, Call Graph, Memory, Registers, Trace Tune, Fingerprint, Analyzer, and the rest. Clicking a card opens its panel, or brings it to the front if it is already open somewhere; hovering a card names it in the capsule.

The capsule, idle:

The capsule: a minus, OPEN, the status word, SAVE, a plus.
THE CAPSULE: A MINUS, OPEN, THE STATUS WORD, SAVE, A PLUS
STATE MEANING
IDLENothing running. Click the centre to start a capture.
01:30 (in place of IDLE)A timed capture is armed; - / + change it in 30-second steps, down to IDLE for "until stopped".
LINK (amber)Attaching to the target.
REC 00:42 (red)Recording; the elapsed time counts up. The whole capsule is the stop button.
SAVINGFinalising the file after stop.
LOADINGOpening a recording or taking a snapshot.

OPEN opens a recording from disk. SAVE saves the current one to a place of your choice and is highlighted while the recording in memory is unsaved. Both words hide while recording.

The dock: tabs, splits and tiles

Views live in tiles. A tile has a header with the view's title (and a status hint for some views), a grip, and a close button; tiles with several views show them as tabs.

  • Drag a tab by its header onto another tile's header to tab it there.
  • Drag it onto another tile's left, right, top or bottom band to split that tile and dock the view on that side.
  • Drag the dividers between tiles to resize.
  • Close with the tile's or the tab's close button, or click its top-bar card.

The arrangement, the open views, the theme and the sidebars are remembered between runs. Trace chart sizes, overlays, and hidden channels are also reused when the next recording has the same trace channels. The first-run layout is CPU and the Event Table above the Timeline.

Some views tile again inside themselves: the Trace panel's charts, the Profiler's source files, and the Timers and Comms Split views, each with the same drag and divider gestures.

The log

The log sidebar (panel icon, far right of the top bar) has two tabs:

  • System: what the app did, one line per step ([h:mm:ss pm] [LEVEL] message): probe attach, ring discovery, decode statistics, losses, warnings and errors. The first place to look when a capture does not behave.
  • User: string messages the firmware sent ([ 12.345678] message), on the recording's clock.

Buttons clear the log, copy it, save it to a file, and toggle auto-scroll. Long lines wrap; the panel is drag-resizable.

The shared time model

Every time-based view reads the same four things, so what you do in one is visible in all of them:

THING HOW IT IS SET WHERE IT SHOWS
Zoom windowCtrl+wheel (Cmd+wheel on macOS) zooms around the pointer; Ctrl+drag shades a range and zooms to it on release; Shift+wheel or a horizontal wheel pans; drag pans; a fit chip returns to the full recordingTimeline ruler, chart time axis, Timers ruler, Comms window caption; the Comms Split view scopes its table to it
Hover cursorMoving the pointer over any of those viewsA hairline in every view with a time axis, with the time in each ruler
Pinned cursorA click, when Sticky Cursor is on; a double-click in the Timeline, a chart, or the Event Table and jumps from CPU, Analyzer, Timers, and Comms pin it tooAn amber hairline everywhere; the Event Table highlights and centres the nearest event; the next click anywhere releases a jump-pinned cursor
Selected regionHold Shift and move the pointer over the Timeline or a chart: the region sweeps from where Shift went down and settles when you release it; Escape clears itDimmed outside the region in the Timeline and charts; the CPU and Analyzer views can scope to it (the Selection pill)
Measurement markersCtrl+right-click (Cmd+right-click on macOS) in the Timeline or a chart; drag an A/B/C/... handle to refine itA shared marker strip in the Timeline and every time-based chart, with the delta between each adjacent pair

Themes, scale and shortcuts

KEY ACTION
Ctrl / Cmd + +, Ctrl / Cmd + -, Ctrl / Cmd + 0Scale the whole interface up, down, back to 100 %
EscapeClear the selected region
Ctrl / Cmd + wheelZoom the time axis around the pointer
Ctrl / Cmd + dragShade a time range, then zoom every synchronized time view to it
Ctrl / Cmd + right-clickAdd a measurement marker
Shift + wheel, or a horizontal wheelPan the time axis
Shift + moveSweep the selected region
Double-click in Timeline / TracePin that time and highlight the nearest Event Table row

The Theme card cycles Dark, Graphite and Light.

Where things are stored

OS PER-USER FOLDER
Windows%APPDATA%\ViewAlyzer-GPUI\
macOS~/Library/Application Support/ViewAlyzer-GPUI/
Linux$XDG_CONFIG_HOME/ViewAlyzer-GPUI/ (default ~/.config/ViewAlyzer-GPUI/)

Inside it: sidebar-settings.xml (every sidebar field and toggle), state.json (window, theme, dock layout), recordings/ (complete .vadb recordings and raw .va byte logs, shared with the command line), the Trace Tune graph, and the installed domains. See Open, save and share recordings for which format to use. Deleting state.json restores the first-run layout; deleting the whole folder resets the app.