The runtime, on the record.
Works today with the debug probe already on your desk.
Live visibility into RTOS scheduling, interrupts, and memory over any standard debug probe. Software tracing through a lightweight recorder, or hardware trace over ETM when you cannot touch the build.
ViewAlyzer OEM Extensions turn proprietary silicon, protocols, and firmware instrumentation into first-class trace domains, with dedicated decoding, visualization, analysis, and tooling built directly into ViewAlyzer.
FEATURE COMPARISON
Today ViewAlyzer does most of what these tools do, and a dozen things none of them do. By our own count that is 85 to 90% of what either of them does, and the one real gap is the number of RTOS kernels we have written adapters for. That gap is named in this table rather than buried, and it closes soon. What the table cannot show is the part we care about most: a ViewAlyzer capture is a record, not a picture. Every number in the GUI is reachable from the headless CLI, so interrupt latency, scheduling jitter, stack headroom or a deadline that was missed once can each be a budget your CI asserts against and fails the build on, with the trace attached to the failure. For our competitors the GUI is the product and automation is the afterthought. And the direction is not on anyone else's roadmap either: ViewAlyzer already captures through whatever probe is on your desk, and our BKPT #1 probe will put hardware instruction trace on benches that have never been able to afford it.
| Feature | Percepio | SEGGER | BKPT Labs | |||
|---|---|---|---|---|---|---|
| ViewFree | ProfilePaid | TracealyzerPaid | SystemViewFree or paid | ViewAlyzer FreeNo license needed | ViewAlyzerLicensed | |
| Probes and transports | ||||||
| Probes and transportsWhat it can capture through | ? | ✓J-Link | ✓Any interface, per their sheet | ✓J-Link for streaming | ✓✓ST-Link, J-Link, CMSIS-DAP, UDP, UART, CustomJ-Trace (coming soon) | |
| Only in ViewAlyzer | ||||||
| ETM instruction traceOnly in ViewAlyzer | ✕ | ✕ | ✕ | ✕ | ✓✓Flame graph, call graph, source view and a step-through of what actually ran | |
| Live variable watchingNo firmware instrumentationOnly in ViewAlyzer | ✕ | ✕ | ✕ | ✕Data Plot needs the firmware to send the values | ✓100 Hz, 4 symbols | ✓1 kHz and up on a running target. No halt, no reset |
| Math on tracesNode graph of formulas over channelsOnly in ViewAlyzer | ✕ | ✕ | ✕ | ✕ | ✓✓Wire a trace into a formula node and graph the result, live during a capture. A formula can call any of 24 built-in maths functions, reference other channels as variables, look back N samples, and feed its own last output back for IIR filters | |
| Peripheral register browserCMSIS-SVDOnly in ViewAlyzer | ✕ | ✕ | ✕ | ✕ | ✓✓Peripherals, registers and bit fields from your SVD. Tick any of them to poll and graph on a running target | |
| ELF symbol browserOnly in ViewAlyzer | ✕ | ✕ | ✕ | ✕ | ✓✓Searchable, sortable symbol table with a size heat map | |
| Firmware memory analysisFrom the ELF and MAPOnly in ViewAlyzer | ✕ | ✕ | ✕ | ✕ | ✓✓Flash and RAM capacity, section layout, and the largest sections with the linker source that pulled them in | |
| Function call graphOnly in ViewAlyzer | ✕ | ✕ | ✕ | ✕ | ✓✓Built from the ELF: pick a root, set a depth, pan and zoom the graph | |
| Trace fingerprintsRegression checks against a known-good runOnly in ViewAlyzer | ✕ | ✕ | ✕ | ✕ | ✓✓Freeze a good capture as a small fingerprint file that carries a tolerance for every metric, or let it learn normal variance from several runs. Every new capture then gets a pass, warn or fail verdict per metric, in the app and from a CLI compare that fails your CI build on a regression. | |
| IPC message anatomyWhere one message spent its timeOnly in ViewAlyzer | ✕ | ✕ | ✕Aggregate IPC metrics, no per-message pairing | ✕ | ✓✓Every queue send is paired with the receive that dequeued it, every notification and semaphore give with its take. Pick one exchange and see how long it sat in the queue versus how long the consumer took, then jump the timeline zoomed to that exact moment. A full-capture latency scatter marks backlog peaks, so messages that were slow because the queue was deep stand out at a glance. The same per-path pairing stats print from the headless CLI. | |
| MCP server for AI agentsOnly in ViewAlyzer | ✕ | ✕ | ✕ | ✕ | ✓✓An agent can start a capture, query it, run SQL and read the license state | |
| Token-budgeted query APIBuilt for LLM context limitsOnly in ViewAlyzer | ✕ | ✕ | ✕ | ✕ | ✓✓Three tiers with hard token caps. Ask for too much and you get a fix, never a silent truncation | |
| SQL over a recordingOnly in ViewAlyzer | ✕ | ✕ | ✕ | ✕ | ✓✓Read-only joins and aggregation, from the CLI or from an agent | |
| Any agent drives the live viewModel agnostic, no plugin per vendorOnly in ViewAlyzer | ✕ | ✕ | ✕ | ✕The control port can start, stop and export, not move the view | ✓✓Tool calls and a harness, not a plugin for one vendor's model, so point whatever agent you already use at it. Available to demo, and licensable if you want it inside your own IDE or agent | |
| Python client packageOnly in ViewAlyzer | ✕ | ✕ | ✕ | ✕ | ✓✓Python bindings to script captures, replay and analysis, with typed results | |
| Core visualization | ||||||
| Trace view | ✓ | ✓ | ✓ | ✓ | ✓Task / ISR swim lanes, 10 lanes | ✓Unlimited lanes, nested function spans, contention links |
| Event log | ✓ | ✓ | ✓ | ✓ | ✓✓Virtual scroll over millions of rows, search, relation links, click to seek | |
| CPU load graph | ✓ | ✓ | ✓ | ✓ | ✓✓Stacked per-task bands, hover breakdown, busy-vs-idle headline load | |
| User events shown in trace | ✓ | ✓ | ✓ | ✓ | ✓✓Unlimited traces, 8 widget types and counting | |
| Trace snapshotsPost-mortem grab of a target buffer | ✓up to 16 KB | ✓unlimited | ✓unlimited | ✓Single-shot or post-mortem; the buffer can be dumped with any debugger | ✓✓Firmware keeps a post-mortem ring in RAM. Attach a probe after a crash or an untethered run, and one button or one CLI flag scans for the ring and saves a normal recording | |
| Trace streaming | ✕ | ✓J-Link only | ✓ | ✓J-Link RTT | ✓✓Any probe, any transport. Live streaming is the default mode, not an upgrade | |
| Profiling and analysis | ||||||
| Communication flow | ✕ | ✓ | ✓ | ✕API calls show in the event list, no flow view | ✓✓A Comms panel turns the capture into paths: every producer, object and consumer combination gets a sortable row with rate, median and p99 latency, blocking, and failed operations like full-queue sends and wait timeouts. Give-to-take links and mutex contention are still drawn right on the timeline | |
| User event signal plot | ✕ | ✓ | ✓ | ✓Data Plot, with scaling and offset per signal | ✓✓Line, bar, histogram, gauge, counter, table, toggle, register bitfield | |
| Heap usage | ✕ | ✓ | ✓ | ✓Per-heap bytes used and free, with allocation sources | ✓✓Per-heap totals, and every failed allocation with the size it wanted | |
| Stack usage | ✕ | ✓ | ✓ | ✓Per task, where the kernel reports it | ✓✓Per-task high-water marks | |
| Timing metrics | ✕ | ✓ | ✓ | ✓Min, quartiles, max and activation counts per context | ✓✓Min / max / mean / jitter, percentiles, preemption counts, priority data | |
| Advanced | ||||||
| Streaming over any interface | ✕ | ✕ | ✓ | J-Link RTT probe-side. The IP and UART recorders move the work into your firmware | ✓✓SWO / ITM, J-Link RTT, RAM buffer over SWD, direct ST-Link USB, CMSIS-DAP, UDP, serial | |
| Unlimited trace length | ✕ | ✕ | ✓ | ✓Uncapped, including under the non-commercial license | ✕5 s per capture | ✓ |
| Interval tracing | ✕ | ✕ | ✓ | ✓Performance markers: start, stop, mark | ✓✓Function spans from firmware, and highlight any region for its own statistics | |
| State machine tracing | ✕ | ✕ | ✓ | ✕ | Visible through toggle and register widgets. No state diagram yet | |
| Runnable tracingAUTOSAR runnables | ✕ | ✕ | ✓ | ✕ | ✕✕Function spans are the nearest equivalent | |
| Interval plot | ✕ | ✕ | ✓ | Box plot and histogram of durations, not durations over time | ✓✓Execution and period scatter, event-interval scatter, viewport histogram | |
| Instance graphs | ✕ | ✕ | ✓ | ✕ | ✓✓Per-instance scatter. Click the outlier to jump to it | |
| Statistics report | ✕ | ✕ | ✓ | ✓Contexts and Runtime windows, exportable | ✓✓Overview panel, plus stats tables inside every recording | |
| Data export | ✕ | ✕ | ✓ | ✓CSV of events, contexts and terminal output | ✓✓The recording is a SQLite database. There is no export step | |
| Advanced RTOS analytics | ✕ | ✕ | ✓ | Running, blocked and suspended totals. No inversion detection | ✓✓Priority inversion, contention detail, preemption, registry overflow warnings | |
| Multiple RTOS and bare metal | ✕ | ✕ | ✓ | ✓embOS, Micrium, uC/OS II and III, FreeRTOS, ThreadX, NuttX, Zephyr, plus no-OS | ✓✓Zephyr, FreeRTOS and bare metal from one recorder. Fewer kernels than SystemView today: gap noted, more adapters on the way | |
| Multicore recording | ? | ? | ? | ✓Per-core event lists and CPU load, time synchronized | ✕✕Single core today | |
| SDK for custom integrations | ✕ | ✕ | ✓ | ✓Documented C API, recorder sources on GitHub | ✓✓C recorder API, documented wire protocol, custom transport hook, Python client package | |
| ELF support | ✕ | ✕ | ✓ | ✓An ELF in the project names resources and locates the RTT block | ✓✓Symbol browser, symbol-driven trace filters, live variable watching, source navigation | |
| Project settings for multiple targets | ✕ | ✕ | ✓ | ✓Projects hold ELFs, recorder config and recordings | ✓✓One config file per board, checked in beside the firmware | |
| Linux tracing with LTTng | ✕ | ✕ | ✓ | ✕ | ✕✕MCU targets only | |
| Floating licenses | ✕ | ✕ | ✓ | ?Group and company-wide licenses; floating not stated | ✕No activation needed | ✕Machine-bound activation today. Talk to us if you need floating, site or another arrangement and we will work something out |
| Free edition terms | ✓Free, with most analysis features removed | ✕Paid only | ✕Paid only | ✓Uncapped, non-commercial use only | ✓Capped, but commercial use allowed | ✕Paid |
| Embedding and OEM termsRun it inside your own product | ? | ? | ? | ? | ✓✓Licensing can cover running the engine inside your own backend and serving the results through your own front end. Ask and we will write the terms | |
| OEM Trace DomainsMake proprietary technology first-class in ViewAlyzer | ? | ? | ? | ? | ✓✓Private or distributable trace domains with dedicated event semantics, decoders, timeline lanes, statistics, filters and purpose-built visualizations for your silicon, protocol stack or firmware platform | |
| Automation, scripting and AI access | ||||||
| Fully scriptable headless binarySame binary, no GUI | ✕ | ✕ | ? | Flags and a TCP port drive the desktop app. There is no non-GUI binary | ✓✓Record, replay, query, doctor. Stable output lines and exit codes to script against | |
| Full CLI parityAny metric the GUI shows, headless | ✕ | ✕ | ✕ | Events, contexts and terminal export to CSV, driven through the GUI | ✓✓Every number the panels show is reachable without a display: CSV metrics from replay, JSON from the tiered query API, or SQL over the same tables the panels read. Stable output lines and documented exit codes to assert on in CI | |
| Capture and hardware reach | ||||||
| Published recorder footprint | ? | ? | ? | ✓Under 2 KB ROM, about 600 B RAM, about 200 B stack per context | ✓✓2.4 KB flash, 644 B RAM, 64 B stack on the event path, bare metal on a Cortex-M4 | |
| Per-event CPU cost | ? | ? | ? | ✓Under 200 cycles, quoted as under 1% at 10,000 events/s on a 200 MHz Cortex-M4 | ✓✓282 to 319 cycles at 170 MHz, measured per API, timestamps to a single CPU cycle | |
| Attach without resetting the target | ✕ | ✕ | ? | ✓RTT attach and post-mortem read leave the target running | ✓✓Attach to a running system mid-flight and still get named tasks | |
| Exact event-loss accounting | ✕ | ✕ | ✕ | Overflow events say data was lost, not how much | ✓✓Know exactly how many events were lost, not just that something was | |
| Works without vendor CLIs installed | ✕ | ✕ | ✕ | ✓Self-contained, but streaming needs J-Link hardware | ✓✓Direct probe drivers. Vendor tools help, they never gate you | |
| VS Code extensionWorking inside the editor | TraceExporter saves a snapshot and opens it in the desktop app | ✕Standalone app. SEGGER’s VS Code extension is for J-Link debugging | ✓✓The trace UI itself runs inside VS Code, not a hand-off to a desktop app. The same UI runs inside BKPT Studio | |||
| Windows, macOS and Linux | ✓ | ✓ | ✓ | ✓x64 and Arm on all three | ✓✓Native builds on all three, plus a Debian package | |
Percepio columns reproduce their published comparison sheet and the SystemView column follows the SEGGER SystemView User Guide (UM08027, v4.10), both read 3 August 2026. Where a competing product may have a capability its documentation does not cover, the cell is a question mark rather than a claim of absence. SystemView is free of charge for non-commercial use with no feature limits, and $298 for a perpetual single-user commercial license. ViewAlyzer Free is the same binary as the licensed build with capture caps applied: 5 second captures with a 5 second cooldown between them, 10 timeline lanes, variable watching at 100 Hz across 4 symbols. User traces are not capped. Nothing is feature gated out of it.
The trace is the test.
A capture is a record, so every number in it is something a build can be measured against. Give a metric a baseline and a tolerance and it becomes a gate: the run that drifts past it fails, and the trace that proves it is attached to the failure. No screenshot, no one remembering what last month looked like.
Everything the panels show is reachable headless, so this runs on real hardware in CI the same way it runs on your desk: boards, transports and probe combinations as a matrix, one row per case, with stable output lines and exit codes to assert on.
- Timing, footprint, event counts and pipeline cost, tracked per run
- Baseline, tolerance band and a gate line on every metric
- Hardware in the loop, one case per board and transport
Freeze the run you trust.
A fingerprint is a known-good capture boiled down to a small file you commit next to the code: CPU share per task, timing stats per trace, stack high water marks, heap peak, event rates and per-function ETM timing, each carrying its own tolerance. It stores expectations, not just values.
Load a baseline during a live session and every capture is judged the moment it lands: each metric gets a pass, warn or fail verdict against its own thresholds, and pinned runs let you compare candidates mid-session. The exact same compare runs headless and exits nonzero on a fail, so the gate in CI and the verdict on your desk can never disagree.
- Learns tolerances from several good runs instead of guessing them
- Gate on exactly the metrics you choose, with advisories on ones that gate poorly
- Counts compare as per-second rates, so captures of different lengths compare fairly
Follow the message, not just the task.
RTOS bugs love the space between tasks: a queue that backs up once an hour, a notification that lands late, a mutex held a little too long. The Comms panel pairs every send with the receive that consumed it, queue messages in FIFO order, notifications by peer, semaphore gives with takes, mutex acquires with releases, and groups them into paths: this producer, through this object, to this consumer.
Each path is a row you can sort by rate, median and p99 latency, worst case, blocking or failures. Open one and you get the full-capture latency scatter with backlog peaks marked, then click a single exchange and see its anatomy: time in the queue, time in the consumer, end to end, with one click jumping the timeline to that exact moment.
- Failures are first class: full-queue sends, wait timeouts and dropped events are counted per path
- Unmatched events are classified, never hidden: a poll timeout looks different from a message still in flight
- The same per-path stats print from the headless CLI, so a latency budget can gate CI
Step through what actually ran.
ETM trace reconstructs the executed instruction stream into flame graphs, dynamic call graphs, and a source level step through of the recorded run. The bug only has to happen once. Requires the BKPT #1 probe.
Make ViewAlyzer understand your technology.
Your product is more than an RTOS and a stream of generic user events. If your silicon, SDK, middleware or internal platform has behavior worth understanding, an OEM Trace Domain can make those concepts native to ViewAlyzer.
A wireless vendor can expose connection state, radio activity and protocol transactions. A motor-control team can surface control-loop phases and fault recovery. A proprietary runtime can get its own objects, relationships and timing rules. Engineers see the language of the product instead of event IDs and printf strings.
- Dedicated event schemas, decoders and protocol-aware timelines
- Domain-specific statistics, filters, relations and visualizations
- Private enterprise extensions or vendor-distributed integrations
- Optional recorder-side instrumentation and long-term compatibility support
Try it on your bench today.
ViewAlyzer is free to evaluate, with no license and no account. For evaluation purposes, recording is capped at 5 seconds per capture until a license is activated; everything else works, and 5 seconds is plenty to watch your scheduler breathe.
Each download bundles the app installer with the ViewAlyzerRecorder firmware library (Apache-2.0), with Zephyr, FreeRTOS, and bare-metal adapters included, so your first capture is one flash away.
Windows builds are code-signed, but the certificate is new and Microsoft SmartScreen may warn until it builds reputation — choose “More info”, then “Run anyway”. Apple notarization is in progress; on macOS, right-click the app and choose Open the first time you launch it.
Request a quote.
There is no one-size-fits-all price because there is no one-size-fits-all team. A solo consultant, a five-person device shop, and a platform org need different seats, support, and terms. Tell us how you work and we will quote what fits. Priced so the engineer who wants it can get it approved, not escalated. And it runs on the debug probe already on your desk.


