Skip to main content

Decode and visualise no_std embedded execution traces over RTT or any byte transport

Project description

embedded-etrace

Decode and visualize embedded execution traces over RTT or any byte transport.

The companion Rust crate (execution_trace) provided by the Cargo package execution-trace runs on your firmware and emits length-delimited protobuf frames for task activations, ISR entries, and point-in-time markers. This Python package decodes those frames on the host and produces interactive HTML timing diagrams.

Example of a time trace diagram

execution trace timing diagram

Installation

# Core decoder only (no diagram dependencies):
pip install embedded-etrace

# With the interactive Bokeh diagram generator:
pip install embedded-etrace[diagram]

Requires Python 3.11+.

Quick start

1. Custom transport — decode a live stream

Implement a loop that appends raw bytes from your transport (RTT, UART, TCP…) into a bytearray and call decode_tracing_stream each iteration:

from execution_trace import (
    SequenceTracker, TraceEventBuffer, decode_tracing_stream, write_tracing_csv,
)

buf = bytearray()
tracker = SequenceTracker("my-device")
event_buffer = TraceEventBuffer()

while True:
    buf += transport.read()                         # append whatever arrived
    decode_tracing_stream(buf, tracker, event_buffer)

# When the session ends:
event_buffer.flush_pending()                        # warn about open spans
csv_path = write_tracing_csv(
    event_buffer.records + event_buffer.markers,    # type: ignore[operator]
    output_dir="data",
)
print(f"Trace written → {csv_path}")

decode_tracing_stream consumes complete frames from buf in-place and handles device resets transparently (the sequence number jumps backward on firmware reboot).

2. Decode a recorded binary file

Use the etrace-decode console script:

etrace-decode recording.bin
etrace-decode recording.bin --output ./data

This produces a timestamped trace_YYYYMMDD_HHMMSS.csv and updates the trace_latest.csv symlink.

3. Generate a timing diagram

etrace-diagram                          # reads trace_latest.csv, writes diagram.html
etrace-diagram data/trace_latest.csv --output out/diagram.html --title "Flight run #7"

Or call the API directly:

from pathlib import Path
from execution_trace.diagram import generate_diagram

result = generate_diagram(
    csv_path=Path("trace_latest.csv"),
    output_path=Path("diagram.html"),
    title="Flight run #7",
)
print(f"{result.n_events} events, {result.n_lanes} lanes, {result.n_missed} deadline misses")

CSV format

Column Type Description
name string Span or marker name
type string task, isr, or marker
start_us float Activation timestamp in µs
end_us float Completion timestamp in µs (= start_us for markers)
priority int Scheduler priority (0 if unknown)
deadline_us float Absolute deadline in µs (optional)
value int Optional u32 marker payload

Wire format

Each frame is a standard protobuf length-delimited record:

[ varint: payload_length ][ proto bytes: TraceEvent ]

The protobuf schema lives in :file:execution-trace/proto/tracing.proto (sibling Rust crate in the same repository).

Development

# Editable install with all dev dependencies:
pip install -e ".[diagram,dev]"

# Run the test suite:
pytest tests/ -v

# Type-check:
mypy src/execution_trace

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

embedded_etrace-0.1.6.tar.gz (27.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

embedded_etrace-0.1.6-py3-none-any.whl (26.5 kB view details)

Uploaded Python 3

File details

Details for the file embedded_etrace-0.1.6.tar.gz.

File metadata

  • Download URL: embedded_etrace-0.1.6.tar.gz
  • Upload date:
  • Size: 27.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for embedded_etrace-0.1.6.tar.gz
Algorithm Hash digest
SHA256 17041bc78c90f16f923bf1fe4198b21569f0bd10ee6ee8ee5cc3095241cc4a02
MD5 e741dd57f248fdec80a690b67b5b46dd
BLAKE2b-256 280e266131078e429e48bfa43c3d4ec1ef19d481f91e710406c4ac23d38b4808

See more details on using hashes here.

Provenance

The following attestation bundles were made for embedded_etrace-0.1.6.tar.gz:

Publisher: release.yml on erl987/execution-trace

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file embedded_etrace-0.1.6-py3-none-any.whl.

File metadata

  • Download URL: embedded_etrace-0.1.6-py3-none-any.whl
  • Upload date:
  • Size: 26.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for embedded_etrace-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 ad590aeacfb33c64951f93e6ee8b347c1d7b6ae6745797945cd85a6fe9b13450
MD5 652432d81783b973848824c3846794ea
BLAKE2b-256 433df905dd17719cd621e3bd3c28a9758b2b11121a804caef5f61866d6520f50

See more details on using hashes here.

Provenance

The following attestation bundles were made for embedded_etrace-0.1.6-py3-none-any.whl:

Publisher: release.yml on erl987/execution-trace

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page