Débogage des blocs de code en mode org

11

Existe-t-il des outils pour faciliter le suivi des erreurs dans les blocs en mode organisationnel? (Je travaille spécifiquement avec python)

Mon flux de travail actuel consiste à copier du code qui fonctionne dans un bloc source et à essayer de n'apporter que des modifications minimes. Si des erreurs majeures se produisent, je le recopie dans un autre fichier, ou emmêle le bloc et débogue le fichier résultant.

Y a-t-il des outils qui me manquent? (par exemple, quelque chose comme le mode de compilation où cela vous amènerait à la ligne sur laquelle l'erreur se trouve.)

Edit: par exemple, je viens de trouver Cc Cv v, qui affiche un tampon avec des références noweb développées. Malheureusement, il n'inclut pas d'arguments d'en-tête, donc le code de celui-ci ne peut pas être exécuté sans importer d'abord ceux de l'interpréteur. De même, si j'ai une déclaration de retour, qui l'empêche d'être exécutée et que le tampon n'est pas modifiable, il faut donc plusieurs étapes pour obtenir la source exécutable à partir d'un bloc python.

user2699
la source
3
Voir emacs.stackexchange.com/questions/13244/… . Ma solution préférée actuelle est (org-src-debug). Cela présente l'avantage que vous pouvez déboguer des blocs de code source avec des arguments d'entrée.
Tobias
Commentaire pour d'autres personnes ayant des problèmes similaires: l'utilisateur2699 a modifié la question pour indiquer clairement qu'il souhaite déboguer les blocs de code source python . Le dernier commentaire de Tobias ne s'applique qu'à l'exécution de blocs de code emacs-lisp .
Tobias
1
Avez-vous ajouté un en- :sessiontête à votre bloc de code? par exemple :session *my-python*. Ensuite, regardez simplement l'exécution du script dans le *my-python*tampon dans une autre image ou fenêtre. Je suppose que vous voulez quelque chose de plus sophistiqué que cela?
Melioratus
@Melioratus, c'est un peu primitif (ne semble pas bien gérer les erreurs, et ajoute une sortie supplémentaire dans la console python), mais c'est beaucoup mieux que le rien. Et la console python est très sympa. Vous devriez soumettre cela comme réponse.
user2699
@Tobias, Merci, c'est le genre de chose que je recherche, tout simplement pas spécifique à elisp.
user2699

Réponses:

7

Méthode 1

  1. Ajoutez un en- :sessiontête à votre bloc source.

    Dans l'exemple, l'utilisation de l'en - tête : session exécutera le code dans un tampon nommé *my-python*et affichera les messages de débogage.

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

    Conseils:

    • Utilisez C-c C-v C-zpour diviser l'écran verticalement et afficher le *my-python*tampon interactif .
    • Utilisez C-c C-v ?pour afficher d'autres raccourcis utiles.

Méthode 2

  1. Placez le point dans le bloc de code et éditez le bloc en utilisant C-c ', par exemple org-edit-special. Cette méthode vous permettra d'utiliser la python-modefonctionnalité intégrée.

  2. Démarrez l'interpréteur python avec C-c C-p, qui divisera la fenêtre et ouvrira le nom du tampon *Python*. Pour passer à la mémoire tampon de l'interpréteur python, appuyez sur C-c C-z.

    Remarque: récemment, j'ai remarqué qu'un *Warnings*tampon s'affiche à la place. Placez simplement un point à l'intérieur du *Warnings*tampon et appuyez sur qpour afficher le *Python*tampon.

  3. Une fois terminé, propagez votre code mis à jour dans le bloc de code avec C-c 'ou annulez toutes les modifications avec C-c C-k.


Notez que ce code a été testé avec:
version emacs: GNU Emacs 26.1
version org-mode: 9.1.14

Melioratus
la source