Metadata-Version: 2.4
Name: pyavrocd
Version: 0.16.4
Summary: A cross-platform GDB server for AVR MCUs
License-File: LICENSE
Keywords: AVR,EDBG,gdb-server,debugging
Author: Bernhard Nebel
Author-email: nebel@arduino-craft-corner.de
Requires-Python: <3.14,>=3.10
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Operating System :: MacOS
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX :: Linux
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Topic :: Software Development :: Debuggers
Requires-Dist: markdown-include (>=0.8.1,<0.9.0)
Requires-Dist: mkdocs (>=1.6.1,<2.0.0)
Requires-Dist: pexpect (>=4.9.0,<5.0.0)
Requires-Dist: pre-commit (>=4.2.0,<5.0.0)
Requires-Dist: pyedbglib (>=2.24.2.18,<3.0.0.0)
Requires-Dist: pyinstaller (>=6.12.0,<7.0.0)
Requires-Dist: pylint (>=4.0.0,<5.0.0)
Requires-Dist: pymcuprog (>=3.17.3.45,<4.0.0.0)
Requires-Dist: pytest (>=8.4.2,<9.0.0)
Requires-Dist: pytest-cov (>=7.0.0,<8.0.0)
Requires-Dist: pyusb (>=1.3.1,<1.4.0)
Project-URL: Bug Tracker, https://github.com/felias-fogg/PyAvrOCD/issues
Project-URL: Documentation, https://felias-fogg.github.io/PyAvrOCD/
Project-URL: Repository, https://github.com/felias-fogg/PyAvrOCD
Description-Content-Type: text/markdown

#  PyAvrOCD

[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg?logo=opensourceinitiative&logoColor=white)](https://opensource.org/licenses/MIT)
[![PyPI version](https://img.shields.io/pypi/v/pyavrocd?logo=pypi&logoColor=white)](https://pypi.org/project/pyavrocd/)
[![PyPI Python Version](https://img.shields.io/pypi/pyversions/pyavrocd?logo=python&logoColor=white)](https://pypi.org/project/pyavrocd/)
![Pylint badge](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/felias-fogg/c0d539e3ad0d10252d2aab8ad325246a/raw/pylint.json)
![Pytest badge](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/felias-fogg/c0d539e3ad0d10252d2aab8ad325246a/raw/pytest.json)
![Coverage badge](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/felias-fogg/c0d539e3ad0d10252d2aab8ad325246a/raw/pycoverage.json&maxAge=30)
[![Release workflow](https://github.com/felias-fogg/PyAvrOCD/actions/workflows/release.yml/badge.svg)](https://github.com/felias-fogg/PyAvrOCD/actions/workflows/release.yml)
[![Commits since latest](https://img.shields.io/github/commits-since/felias-fogg/PyAvrOCD/latest?include_prereleases&logo=github)](https://github.com/felias-fogg/PyAvrOCD/commits/main)
[![PyPI Downloads](https://static.pepy.tech/personalized-badge/pyavrocd?period=total&units=INTERNATIONAL_SYSTEM&left_color=GREY&right_color=BLUE&left_text=pypi+downloads)](https://pepy.tech/projects/pyavrocd)
![Hit Counter](https://visitor-badge.laobi.icu/badge?page_id=felias-fogg_PyAvrOCD)

<p align="center">
  <a href="https://felias-fogg.github.io/PyAvrOCD/index.html"><img src="https://raw.githubusercontent.com/felias-fogg/PyAvrOCD/refs/heads/main/docs/pics/logo-small.png" width="15%"></a>
</p>




PyAvrOCD is a GDB server for 8-bit AVR MCUs (see [list of supported MCUs](https://felias-fogg.github.io/PyAvrOCD/supported-mcus/) and [supported boards](https://felias-fogg.github.io/PyAvrOCD/supported-boards/)). It can communicate with Microchip's debug probes such as MPLAB Snap and with the DIY debugger dw-link (see [list of supported debug probes](https://felias-fogg.github.io/PyAvrOCD/supported-debuggers/)).

So, why another open-source GDB server for AVR MCUs? The main intention is to provide a *cross-platform* AVR GDB server. In other words, it is ***the missing AVR debugging solution*** for [PlatformIO](https://platformio.org) and the [Arduino IDE 2](https://www.arduino.cc/en/software/). And it excels in [minimizing flash wear](https://arduino-craft-corner.de/index.php/2025/05/05/stop-and-go/) and [protects single-stepping against interrupts](https://arduino-craft-corner.de/index.php/2025/03/19/interrupted-and-very-long-single-steps/).

<p align="center">
<img src="https://raw.githubusercontent.com/felias-fogg/pyavrocd/refs/heads/main/docs/pics/ide2-6.png" width="70%">
</p>


When you want to install PyAvrOCD, <!-- you can [install it as part of an Arduino core](https://felias-fogg.github.io/PyAvrOCD/install-link/#arduino-ide-2), so that it can be used in the Arduino IDE 2. -->you can [download binaries](https://felias-fogg.github.io/PyAvrOCD/install-link/#downloading-binaries), you can install PyAvrOCD using [PyPI](https://felias-fogg.github.io/PyAvrOCD/install-link/#pypi), or you can, of course, [clone or download the GitHub repo](https://felias-fogg.github.io/PyAvrOCD/install-link/#github).

[Read the docs](https://felias-fogg.github.io/PyAvrOCD/index.html) for more information.


## What has been done so far, and what to expect in the future

When moving from the earlier version of the GDBserver, called [dw-gdbserver](https://github.com/felias-fogg/dw-gdbserver), to PyAvrOCD, support for JTAG Mega chips has been added. This was more work than anticipated. And the current release is not yet fit for serious work. A number of JTAG MCUs still need to be tested, and more unit and integration tests are called for.  If you would nevertheless like to give PyAvrOCD a try, you are welcome. Any feedback, be it bug reports, crazy ideas, or praise, is welcome.

The next step after the v1.0.0 release of PyAvrOCD will be to incorporate it into the respective Arduino cores, so that easy debugging in the Arduino IDE 2 will become possible. Until then, you need to live with the debugWIRE-only GDB server [dw-gdbserver](https://github.com/felias-fogg/dw-gdbserver), which is part of MiniCore and my fork of ATTinyCore, if you would like to debug inside the Arduino IDE 2.

After the integration into the Arduino IDE2, UPDI MCUs will follow next. I am unsure about Xmegas.

