Skip to content

Troubleshooting

This page collects the failure modes that are most likely to block a first run.

Build Failures

cmake cannot find Python or pybind11

Use a Python environment that has the development dependencies installed:

sudo apt install -y cmake g++ libegl1 libxcb-cursor0 libxkbcommon-x11-0 ninja-build python3-dev
python -m pip install ".[gui]"

If you are building from source outside a venv, make sure the system Python development headers are installed.

Qt or GUI dependencies are missing

Install the GUI extra:

python -m pip install ".[gui]"

If the GUI still fails to start, confirm that PySide6 is installed in the active environment and that QT_QPA_PLATFORM=offscreen is set for headless smoke tests.

Missing Dependencies

python is not available

Use python3 to create the virtual environment and then use the venv interpreter:

python3 -m venv .venv
. .venv/bin/activate
python -m pip install ".[gui]"

mkdocs is not installed

Install the docs extras in a virtual environment:

python3 -m venv .venv
. .venv/bin/activate
python -m pip install mkdocs mkdocs-material

Device Not Found

rtl_tcp

Check host, port, and server availability:

sdr-analyzer-cli --source rtl_tcp --host 127.0.0.1 --port 1234

If the session exits immediately, confirm that the remote server is running and that the chosen port matches the server configuration.

If you are building on Windows, note that the built-in rtl_tcp backend is not available today because the implementation uses POSIX socket APIs.

UHD

Confirm the USB or network-connected device is visible to UHD and that the --device-args string matches the attached radio.

SoapySDR

Confirm the device driver is installed and the --device-string or --device-args value matches the backend you intend to use.

GUI Issues

The GUI opens but does not show live data

Check that the source is running and that the selected source kind is correct. For a first smoke test, use the simulator workflow before trying a live device.

Headless validation fails

Set:

QT_QPA_PLATFORM=offscreen

This is required for CI-style GUI validation on machines without a display server.

Connection Errors

rtl_tcp disconnects

Disconnects are treated as source failures. The session should stop and surface the reason through last_error().

For reproducible diagnostics:

./build/sdr-analyzer-cli --source rtl_tcp --host 127.0.0.1 --port 1234 --log-level debug --log-json --log-file diagnostics.jsonl

Replay ends early

Replay files stop at end of stream by design. For repeated playback, use a looping source configuration or replay a longer capture.

Diagnostics Workflow

When the failure is unclear, collect software diagnostics separately from analyzer measurements:

./build/sdr-analyzer-cli \
  --source simulator \
  --frames 10 \
  --log-level debug \
  --log-json \
  --log-file quality-artifacts/diagnostics/debug.jsonl

If the issue affects analyzer output rather than startup, also collect:

./build/sdr-analyzer-cli \
  --source simulator \
  --frames 10 \
  --export-jsonl quality-artifacts/diagnostics/measurements.jsonl

Interpretation: - debug.jsonl is the software log - measurements.jsonl is the analyzer measurement export

Fast Recovery Workflow

When something is unclear, use the stable sequence: 1. simulator 2. replay 3. rtl_tcp 4. live hardware backends

That isolates configuration problems before you involve hardware and the network.