Отладка блоков кода в режиме org

11

Существуют ли какие-либо инструменты, облегчающие отслеживание ошибок в блоках режима org? (Я работаю с питоном специально)

Мой текущий рабочий процесс состоит в том, чтобы скопировать код, который работает в исходный блок, и попытаться внести только минимальные изменения. Если происходят серьезные ошибки, я либо копирую его обратно в другой файл, либо путаю блок и отлаживаю полученный файл.

Есть ли какие-то инструменты, которые мне не хватает? (например, что-то вроде режима компиляции, в котором вы попадете на строку, в которой включена ошибка.)

Изменить: например, я только что нашел Cc Cv v, который вызывает буфер с расширенными ссылками noweb. К сожалению, он не включает аргументы заголовка, поэтому код из этого не может быть выполнен без предварительного импорта в интерпретатор. Точно так же, если у меня есть оператор return, который удерживает его от выполнения, а буфер не редактируется, поэтому предпринимает несколько шагов, чтобы получить работающий источник из блока python.

user2699
источник
3
См. Emacs.stackexchange.com/questions/13244/… . Мое любимое решение сейчас (org-src-debug). Это имеет то преимущество, что вы можете отлаживать блоки исходного кода с помощью входных аргументов.
Тобиас
Комментарий для других с похожими проблемами: пользователь 2699 отредактировал вопрос, чтобы прояснить, что он хочет отлаживать блоки исходного кода Python . Последний комментарий Тобиаса относится только к выполнению блоков кода emacs-lisp .
Тобиас
1
Вы добавили :sessionзаголовок в свой блок кода? например :session *my-python*. Затем просто наблюдайте за выполнением скрипта в *my-python*буфере в другом кадре или окне. Я предполагаю, что вы хотите что-то более сложное, чем это правильно?
Мелиоратус
@Melioratus, это немного примитивно (кажется, не очень хорошо обрабатывает ошибки, и добавляет дополнительный вывод в консоли Python), но это намного лучше, чем ничего. И консоль Python очень хорошая. Вы должны представить это как ответ.
user2699
@Tobias, спасибо, это то, что я ищу, просто не относится к elisp.
user2699

Ответы:

7

Способ 1

  1. Добавьте :sessionзаголовок к вашему исходному блоку.

    В этом примере использование заголовка : session будет выполнять код внутри буфера с именем *my-python*и отображать сообщения отладки.

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

    Советы:

    • Используется C-c C-v C-zдля разделения экрана по вертикали и отображения интерактивного *my-python*буфера.
    • Используйте C-c C-v ?для отображения других полезных ярлыков.

Способ 2

  1. Место точки в блоке кода и редактирования блока с использованием C-c ', то есть org-edit-special. Этот метод позволит вам использовать python-modeвстроенные функции.

  2. Запустите интерпретатор python C-c C-p, который разделит окно и откроет имя буфера *Python*. Для переключения в буфер интерпретатора Python нажмите C-c C-z.

    Примечание. Недавно я заметил, что *Warnings*вместо этого отображается буфер. Просто поместите точку в *Warnings*буфер и нажмите qдля отображения *Python*буфера.

  3. Когда закончите, распространите ваш обновленный код в блок кода с помощью C-c 'или отмените любые изменения с помощью C-c C-k.


Обратите внимание, что этот код был протестирован с использованием:
emacs-версии: GNU Emacs 26.1
версия в режиме org: 9.1.14

Melioratus
источник