← View all posts

pyOCD 0.46.0 released

Oct 19, 2026
Teo Mahnic

pyOCD v0.46.0 has been released and is available from PyPI. This version includes several improvements and bug fixes. Highlights include enhanced trace support, GDB Server operation without a connected client, and the new info subcommand. The complete list of changes is provided below.

To upgrade pyOCD, just run pip:

pip install --upgrade pyocd

This release expands trace support and its integration with CMSIS-Toolbox. SWO and Trace Buffer capture can now be configured through *.cbuild-run.yml, with raw trace output sent to files or TCP servers. Note that Trace Buffer capture requires a Device Family Pack (DFP) that provides the necessary trace debug sequences (see Open-CMSIS-Pack-Spec documentation).

Trace generation is configured separately using *.ctrace-run.yml, with synchronization on resume. The setup is applied automatically before the target resumes. While the target is halted, you can also apply it manually using the monitor ctrace reload command.

For debug sequence configuration, the device-settings node in *.cbuild-run.yml now allows you to set debug sequence variables directly. These values take precedence over settings in *.dbgconf files.

Alongside these trace enhancements, the GDB Server now supports SEGGER RTT and SystemView through *.cbuild-run.yml configuration. RTT channels can be connected to standard I/O, files, or TCP servers, while SystemView recordings can be saved to files or streamed live to the SystemView application. Trace, RTT, SystemView, and semihosting remain active even when no GDB client is connected.

For a quick overview of the connected hardware, the new info subcommand displays debug probe and target information.

Reliability improvements round out the release, with better handling of sleeping cores, more robust RTT control block discovery, and more reliable GDB Server connections and shutdown. Fixes address SWO timestamp decoding, and HID probe connections hanging on Windows, as well as issues in CoreSight and flash programming.

Thanks again to all the contributors who helped make this release possible! ❤️

v0.46.0 on GitHub
v0.46.0 on PyPI


New Features

  • Trace:
    • SWO and Trace Buffer setup using configuration from *.cbuild-run.yml with raw trace output to files or TCP servers
    • Trace generation setup using configuration from *.ctrace-run.yml with synchronization on resume
    • Optional command monitor ctrace reload to manually apply trace generation setup while the target is halted
    • Support trace related DFP debug description enhancements

      Note: Trace Buffer capture requires a DFP with the necessary trace debug sequences

  • info subcommand:
    • Add pyocd info to display debug probe and target information
  • GDB Server:
    • Add support for SEGGER’s RTT and SystemView, configured via *.cbuild-run.yml
    • Support RTT channels association with STDIO, files or TCP servers
    • Support SystemView recording to files, and live streaming to the SystemView application
    • Keep Trace, RTT, SystemView and semihosting working without a connected GDB client
  • Debug sequences:
    • Support device-settings in *.cbuild-run.yml to configure debug sequence variables, taking precedence over *.dbgconf settings
    • Support new trace related sequences TraceCapture and TraceFlush
    • Support buffer transfers through the APv2 (ADIv6) top-level access port address space

Improvements

  • GDB Server:
    • Allow stepping and resuming over BKPT instructions
    • Handle semihosting requests during stepping
    • Improve connection, disconnection, and shutdown reliability
    • Preserve breakpoint and watchpoint stop reasons when they coincide with debugger interrupts
  • RTT:
    • Retry control block discovery until it is initialized by the application
    • Keep debugger commands responsive during discovery
    • Reduce repeated warnings during discovery and polling failures, and report recovery
  • Target:
    • Improve handling of sleeping cores during debugging, memory and register access, reset, and flash programming
    • Add live.status_fault_retry_timeout session option to configure retry behavior for failed target status reads in gdbserver and run modes
    • Improve connection error messages when no target is detected
  • CMSIS-DAP:
    • Add udev rules for Linux:
      • Raspberry Pi Debug Probe (CMSIS-DAP)
      • Artery Technology CMSIS-DAP (@mlasch)
      • Arduino UNO WiFi R4 CMSIS-DAP (@rolaca11)
  • SWV:
    • Keep SWV capture running after trace parser errors

Fixes

  • GDB Server:
    • Fix stop notifications and acknowledgements in non-stop mode
    • Bypass incorrect thread id handling in older GDB versions, which prevented running and stepping in RTOS threads (thread control block located at address > 0x7fffffff)
  • Commander:
    • Fix returned exit status (@aamir-azeez)
  • SWO:
    • Fix local timestamp packet handling that could cause incorrect decoding of subsequent trace data
    • Correctly skip global timestamp packet payloads to prevent subsequent trace data from being misinterpreted
  • CoreSight:
    • Fix DP and AP register caching affecting reset debug sequences in DFPs
    • Fix root component address discovery on DPv3 targets
    • Correct the reported number of FPB literal comparators
  • DAP access interface:
    • Fix HID debug probe connections hanging on Windows (@Hoohaha)
  • CMSIS-DAP:
    • Fix handling of captured JTAG data in debug sequences when trace logging is enabled
  • J-Link:
    • Fix SWO reads failing when no trace data is available (@adityaanikam)
    • Correct probe connection state reporting (@dottspina)
  • STLink:
    • Fix connection when using pre-reset
  • Flash programming:
    • Honor the erased byte value specified by CMSIS-Pack flash algorithms (@swimmingbrain)
    • Fix LPC4088 flash region page_size (@alramlechner)
  • Helpers:
    • Fix yellow color leaking into Probe/Board selection for invalid choice (@alexapostolu)

New Contributors

  • @adityaanikam made their first contribution in #2021
  • @alramlechner made their first contribution in #2015
  • @mlasch made their first contribution in #1902
  • @GaryLeutheuser made their first contribution in #2017
  • @alexapostolu made their first contribution in #1890
  • @swimmingbrain made their first contribution in #2032
  • @aamir-azeez made their first contribution in #2037

Full Changelog: v0.45.1…v0.46.0