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.5.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.5-py3-none-any.whl (26.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: embedded_etrace-0.1.5.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.5.tar.gz
Algorithm Hash digest
SHA256 9ab7d323bb6cf9531b490b57938938ceda6c179a5d86fc7711b61e90173d877e
MD5 62af7bca07a38a7bc5c5cdac3d4dbc33
BLAKE2b-256 d8def187c3196bbfe93be6d51de9a2b91e3834b4a90284be4b09488b596a87aa

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: embedded_etrace-0.1.5-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.5-py3-none-any.whl
Algorithm Hash digest
SHA256 34d3e5507ca1428da16e881d7d8a3e20e62cf325e08cd5c67efd8f561ff1494b
MD5 bb6127348ed5fe0ca515b5592e3624ef
BLAKE2b-256 5d7bc258fdb2ba9b9510099c05876e43f76ff1551ead1994277d00e4eecc5a25

See more details on using hashes here.

Provenance

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