Debugowanie bloków kodu w trybie org

11

Czy są dostępne narzędzia ułatwiające śledzenie błędów w blokach w trybie organizacji? (Pracuję konkretnie na Pythonie)

Mój obecny obieg pracy polega na kopiowaniu kodu, który działa do bloku źródłowego, i próbowaniu wprowadzania tylko minimalnych modyfikacji. Jeśli wystąpią poważne błędy, albo kopiuję go z powrotem do innego pliku, albo plączę blok i debuguję wynikowy plik.

Czy brakuje mi jakichś narzędzi? (np. coś w rodzaju trybu kompilacji, w którym doprowadziłby cię do linii, w której wystąpił błąd).

Edycja: na przykład właśnie znalazłem Cc Cv v, która wyświetla bufor z rozszerzonymi nowymi referencjami. Niestety nie zawiera argumentów nagłówka, więc kodu z tego nie można uruchomić bez wcześniejszego zaimportowania ich do interpretera. Podobnie, jeśli mam instrukcję return, która powstrzymuje ją przed wykonaniem, a bufor nie jest edytowalny, więc podejmuje kilka kroków, aby uzyskać źródło uruchomieniowe z bloku python.

użytkownik2699
źródło
3
Zobacz emacs.stackexchange.com/questions/13244/… . Moje obecne ulubione rozwiązanie to (org-src-debug). Ma to tę zaletę, że można debugować bloki kodu źródłowego za pomocą argumentów wejściowych.
Tobias
Komentarz dla innych z podobnymi problemami: user2699 zredagował pytanie, aby wyjaśnić, że chce debugować bloki kodu źródłowego Pythona . Ostatni komentarz Tobiasza dotyczy tylko wykonywania bloków kodu emacs-lisp .
Tobias
1
Czy dodałeś :sessionnagłówek do swojego bloku kodu? np :session *my-python*. Następnie obejrzyj wykonanie skryptu w *my-python*buforze w innej ramce lub oknie. Zgaduję, że chcesz czegoś bardziej wyrafinowanego niż to poprawne?
Melioratus
@Melioratus, jest nieco prymitywny (wydaje się, że nie radzi sobie dobrze z błędami i dodaje dodatkowe wyjście w konsoli Pythona), ale jest znacznie lepszy niż nic. Konsola python jest bardzo ładna. Powinieneś przesłać to jako odpowiedź.
user2699,
@Tobias, dzięki, tego właśnie szukam, po prostu nie jest specyficzny dla elisp.
user2699,

Odpowiedzi:

7

Metoda 1

  1. Dodaj :sessionnagłówek do swojego bloku źródłowego.

    W przykładzie użycie nagłówka : session spowoduje wykonanie kodu w buforze o nazwie *my-python*i wyświetlanie komunikatów debugowania.

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

    Wskazówki:

    • Służy C-c C-v C-zdo podziału ekranu w pionie i wyświetlania interaktywnego *my-python*bufora.
    • Służy C-c C-v ?do wyświetlania innych przydatnych skrótów.

Metoda 2

  1. Umieść punkt w bloku kodu i edytuj blok za pomocą C-c ', tj org-edit-special. Ta metoda umożliwia korzystanie z python-modewbudowanych funkcji.

  2. Uruchom interpreter Pythona C-c C-p, który podzieli okno i otworzy nazwę bufora *Python*. Aby przełączyć na bufor interpretera Pythona, naciśnij C-c C-z.

    Uwaga: Ostatnio zauważyłem, że *Warnings*zamiast tego wyświetlany jest bufor. Wystarczy umieścić punkt w *Warnings*buforze i nacisnąć, qaby wyświetlić *Python*bufor.

  3. Po zakończeniu propaguj zaktualizowany kod do bloku kodu za pomocą C-c 'lub odrzuć wszelkie zmiany za pomocą C-c C-k.


Uwaga: ten kod został przetestowany przy użyciu:
wersji emacs: GNU Emacs 26.1
wersja trybu org: 9.1.14

Melioratus
źródło