Depuración de bloques de código en modo org

11

¿Hay alguna herramienta disponible para facilitar los errores de rastreo en los bloques del modo org? (Estoy trabajando con Python específicamente)

Mi flujo de trabajo actual es copiar código que funciona en un bloque de origen e intentar realizar solo modificaciones mínimas. Si se producen errores importantes, lo copio de nuevo a otro archivo o enredo el bloque y depuro el archivo resultante.

¿Me falta alguna herramienta? (por ejemplo, algo así como el modo de compilación donde lo llevaría a la línea en la que se encuentra el error).

Editar: por ejemplo, acabo de encontrar Cc Cv v, que muestra un búfer con referencias noweb expandidas. Desafortunadamente, no incluye argumentos de encabezado, por lo que el código de esto no se puede ejecutar sin importarlos primero en el intérprete. Del mismo modo, si tengo una declaración return, eso evita que se ejecute, y el búfer no es editable, por lo que toma varios pasos para obtener una fuente ejecutable desde un bloque de Python.

usuario2699
fuente
3
Ver emacs.stackexchange.com/questions/13244/… . Mi solución favorita actual es (org-src-debug). Esto tiene la ventaja de que puede depurar bloques de código fuente con argumentos de entrada.
Tobias
Comente para otros con problemas similares: user2699 editó la pregunta para dejar en claro que quiere depurar los bloques de código fuente de Python . El último comentario de Tobias solo se aplica a la ejecución de bloques de código emacs-lisp .
Tobias
1
¿Agregaste un :sessionencabezado a tu bloque de código? por ej :session *my-python*. Luego solo mire la ejecución del script en el *my-python*búfer en otro marco o ventana. ¿Supongo que quieres algo más sofisticado que esto correcto?
Melioratus
@Melioratus, es un poco primitivo (no parece manejar bien los errores y agrega resultados adicionales en la consola de Python), pero es mucho mejor que nada. Y la consola de Python es muy bonita. Debe enviar eso como respuesta.
user2699
@Tobias, gracias, ese es el tipo de cosas que estoy buscando, pero no específico de Elisp.
user2699

Respuestas:

7

Método 1

  1. Agregue :sessionencabezado a su bloque fuente.

    En el ejemplo, el uso del encabezado : session ejecutará el código dentro de un búfer con nombre *my-python*y mostrará mensajes de depuración.

    #+BEGIN_SRC python :session *my-python*
      'Hello {0}\n'.format('World')
    #+END_SRC
    

    Consejos:

    • Se usa C-c C-v C-zpara dividir la pantalla verticalmente y mostrar el *my-python*búfer interactivo .
    • Se usa C-c C-v ?para mostrar otros atajos útiles.

Método 2

  1. Coloque el punto en el bloque de código y edite el bloque usando C-c ', es decir org-edit-special. Este método le permitirá utilizar la python-modefuncionalidad incorporada.

  2. Inicie el intérprete de python con C-c C-p, que dividirá la ventana y abrirá el nombre del búfer *Python*. Para cambiar al búfer de intérprete de Python, presione C-c C-z.

    Nota: Recientemente noté que se *Warnings*mostraba un búfer en su lugar. Simplemente coloque el punto dentro del *Warnings*búfer y presione qpara mostrar el *Python*búfer.

  3. Cuando termine, propague su código actualizado en el bloque de código con C-c 'o descarte cualquier cambio con C-c C-k.


Tenga en cuenta que este código se probó usando:
versión emacs: GNU Emacs 26.1
versión org-mode: 9.1.14

Melioratus
fuente