Debuggen von Codeblöcken im Organisationsmodus

11

Gibt es Tools, die das Verfolgen von Fehlern in Organisationsmodusblöcken erleichtern? (Ich arbeite speziell mit Python)

Mein aktueller Workflow besteht darin, Code, der funktioniert, in einen Quellblock zu kopieren und nur minimale Änderungen vorzunehmen. Wenn schwerwiegende Fehler auftreten, kopiere ich sie entweder zurück in eine andere Datei oder verwickle den Block und debugge die resultierende Datei.

Gibt es irgendwelche Werkzeuge, die mir fehlen? (zB so etwas wie ein Kompilierungsmodus, in dem Sie zu der Zeile gelangen, in der sich der Fehler befindet.)

Bearbeiten: Zum Beispiel habe ich gerade Cc Cv v gefunden, das einen Puffer mit erweiterten Noweb-Referenzen aufruft. Leider enthält es keine Header-Argumente, sodass der Code daraus nicht ausgeführt werden kann, ohne diese zuerst in den Interpreter zu importieren. Wenn ich eine return-Anweisung habe, die verhindert, dass sie ausgeführt wird, und der Puffer nicht bearbeitet werden kann, sind mehrere Schritte erforderlich, um eine ausführbare Quelle aus einem Python-Block abzurufen.

user2699
quelle
3
Siehe emacs.stackexchange.com/questions/13244/… . Meine derzeitige Lieblingslösung ist (org-src-debug). Dies hat den Vorteil, dass Sie Quellcodeblöcke mit Eingabeargumenten debuggen können.
Tobias
Kommentar für andere mit ähnlichen Problemen: user2699 hat die Frage bearbeitet, um zu verdeutlichen, dass er Python- Quellcodeblöcke debuggen möchte . Der letzte Kommentar von Tobias gilt nur für die Ausführung von Emacs-Lisp -Codeblöcken.
Tobias
1
Haben Sie :sessionIhrem Codeblock einen Header hinzugefügt ? zB :session *my-python*. Beobachten Sie dann einfach die Skriptausführung im *my-python*Puffer in einem anderen Frame oder Fenster. Ich vermute, Sie wollen etwas Anspruchsvolleres als dieses Richtige?
Melioratus
@ Melioratus, es ist ein bisschen primitiv (scheint Fehler nicht gut zu behandeln und fügt zusätzliche Ausgabe in der Python-Konsole hinzu), aber es ist viel besser als das Nichts. Und die Python-Konsole ist sehr schön. Sie sollten dies als Antwort einreichen.
user2699
@Tobias, danke, das ist die Art von Sache, die ich suche, nur nicht spezifisch für elisp.
user2699

Antworten:

7

Methode 1

  1. Fügen Sie :sessionIhrem Quellblock einen Header hinzu.

    Im Beispiel führt die Verwendung des : session- Headers den Code in einem Puffer mit dem Namen aus *my-python*und zeigt Debug-Meldungen an.

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

    Tipps:

    • Verwenden Sie C-c C-v C-zdiese Option , um den Bildschirm vertikal zu teilen und den interaktiven *my-python*Puffer anzuzeigen .
    • Verwenden Sie C-c C-v ?diese Option , um andere nützliche Verknüpfungen anzuzeigen.

Methode 2

  1. Platzieren Sie den Punkt im Codeblock und bearbeiten Sie den Block mit C-c ', dh org-edit-special. Mit dieser Methode können Sie python-modeintegrierte Funktionen verwenden.

  2. Starten Sie den Python-Interpreter mit C-c C-p, wodurch das Fenster geteilt und der Puffername geöffnet wird *Python*. Um zum Python Interpreter Buffer zu wechseln, drücken Sie C-c C-z.

    Hinweis: Kürzlich habe ich festgestellt, dass *Warnings*stattdessen ein Puffer angezeigt wird. Platzieren Sie einfach den Punkt im *Warnings*Puffer und drücken Sie q, um den *Python*Puffer anzuzeigen .

  3. Wenn Sie fertig sind, geben Sie Ihren aktualisierten Code mit in den Codeblock weiter C-c 'oder verwerfen Sie alle Änderungen mit C-c C-k.


Beachten Sie, dass dieser Code getestet wurde mit:
emacs version: GNU Emacs 26.1
org-mode version: 9.1.14

Melioratus
quelle