Lo que un lector de pantalla te puede enseñar sobre la depuración remota en Python
El lector de pantalla NVDA es una aplicación Python empaquetada mediante Py2exe junto con algunas extensiones en C++ para acceder al sistema a bajo nivel y mejorar el rendimiento. Sus funcionalidades pueden extenderse mediante complementos que también se escriben en Python, por lo que es importante disponer de alguna forma de depurar el código tanto de los complementos como del núcleo de la aplicación.
Sin embargo, depurar código que se está ejecutando en un entorno empaquetado o embebido es una tarea complicada, especialmente si eres un programador con discapacidad visual y estás tratando de depurar tu propio lector de pantalla, pues alcanzar un breakpoint significa, literalmente, ¡congelar la herramienta de la que dependes para usar el ordenador!
En este taller explicaré cómo hice frente a este problema usando la librería debugpy de Microsoft para la depuración remota de Python. Primero resumiré el problema original y por qué no es posible usar la depuración «normal»; y luego veremos cómo aplicar esta técnica a un ejemplo simplificado de aplicación empaquetada con Py2exe, un aprendizaje que servirá también para cualquier otro entorno embebido independientemente del lenguaje anfitrión en el que está programada la aplicación principal.
Empezaremos con las nociones básicas de depuración local y poco a poco iremos viendo todo lo que hay que tener en cuenta al empaquetar la aplicación y preparar nuestros scripts para permitir la depuración remota, así como la creación de los distintos perfiles de depuración en Visual Studio Code.
Importante: si tú también quieres hacer los ejercicios que enseñaré durante el taller, asegúrate de tener instalado git (para clonar el repo), Python 3.7 o superior y Visual Studio Code con la extensión de Python.
Si nos sobra tiempo también me gustaría explorar otras posibilidades que ofrece esta técnica, como depurar Python embebido en programas cuyo lenguaje principal no es Python, o corriendo en otros sistemas operativos distintos a aquel en el que usamos VSCode.