Depurar el código de cython (.pyx) cuando se utiliza el depurador de python (pdb) – Best Practice

He leído la depuración de Cython, he puesto un punto de interrupción y https://groups.google.com/forum/#!topic/apam-python-users/6rsRwcCAms4 y me pregunto cuál es el mejor flujo de trabajo cuando se depura el código cython que se llama codigo python?

Idealmente, me gustaría ingresar a los archivos .pyx durante una sesión de depuración de Python iniciada desde mi IDE (pycharm), pero parece que esto es imposible. ¿No es posible comstackr información de depuración cuando los archivos pyx están citonizados para que el depurador pueda intervenir?

Si esto no se puede lograr, ¿cuáles son las alternativas (aparte de no usar cython!)?

Como esta pregunta pregunta específicamente cómo ingresar al código de cython, aunque es similar al consejo de Cython & Python Project Test Driven Development y .pyx , no es lo mismo.

Parece que la forma oficial es tu mejor opción. Sería genial si hubiera una alternativa fácil, pero en el enlace que incluiste aquí parece que no lo hay. Este documento wiki parece tener algunos consejos adicionales que faltan en el documento oficial.

Si solo está usando Cython para la velocidad (es decir, no para envolver bibliotecas C), podría usar el modo Python puro, que le permite definir los tipos en un archivo .pxd separado (que existe junto con su código en el archivo .py), o utilizando decoradores.

La ventaja de este modo es que su código puede ejecutarse (y ser depurado) bajo Python simple. Luego te quedas con la clase de errores (con suerte pequeños) que se deben a la escritura estática de Cython y no a tu código. Las desventajas son: 1) ejecutar su código de forma simple Python será más lento; 2) la syntax es un poco más desordenada que la syntax estándar de Cython; 3) no puede acceder a un código C externo como este, que es uno de los principales casos de uso de Cython.

En su defecto, su mejor apuesta son los tradicionales “lotes de declaraciones impresas”. print locals() puede ser útil aquí! Aunque no es del todo satisfactorio.