Skip to main content

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

Project description

embedded-etrace

Decode and visualise no_std 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.

screenshot_python_app_1.png

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.2.tar.gz (26.9 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.2-py3-none-any.whl (26.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: embedded_etrace-0.1.2.tar.gz
  • Upload date:
  • Size: 26.9 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.2.tar.gz
Algorithm Hash digest
SHA256 d66050551e8201391ce4a5530c66ab769d266cd319068b1d299bcbaab4f45044
MD5 8ce8073ff9a19e20910744669ee806d8
BLAKE2b-256 7d0d63265727ff59d8646fb5c49b31625bbe4fa9e91f7e02d383a5952fee1fd3

See more details on using hashes here.

Provenance

The following attestation bundles were made for embedded_etrace-0.1.2.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.2-py3-none-any.whl.

File metadata

  • Download URL: embedded_etrace-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 26.4 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 44b179e5c9f868789f560bc1b0f2e5419f9819fd89958527fdedfaef35d52b66
MD5 ac67870f99576369f8fe37b05ae46fa1
BLAKE2b-256 4ead4e7d95e3ce7fc1e1703a7c6f71bfc832242faa81aface6eec380d2415182

See more details on using hashes here.

Provenance

The following attestation bundles were made for embedded_etrace-0.1.2-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