Использование ipdb с gud emacs без явных контрольных точек в коде

Я использую python.el Если я выберу "отладчик" из меню и введите "python -m pdb myfile.py", начнется gud, а в расколе я увижу приглашение (Pdb) в одном, а мой код python в другом с кареткой на первой строке, указывая, что он готов к работе. Например, шаги "n" к следующей строке и каретка перемещаются соответственно.

Если вместо этого я вхожу в "python -m ipdb myfile.py", кадр разбивается, а один раскол обозначается gud, но нет никакой консоли ipdb. Другими словами, этот способ запуска ipdb, похоже, не работает. Ipdb работает отлично, если я вручную вставляю точку останова в свой код python с помощью ipdb.set_trace(), за исключением того, что он не использует интерфейс gud. Это намеренно, так что трассировка стека ipdb будет работать красиво?

Если это так, это хорошо, но есть ли способ запустить ipdb из emacs без добавления команды set_trace()?

Ответ 1

Основная проблема заключается в том, что gud ищет подсказку (Pdb), и ipdb не запрашивает этот путь. Есть три способа исправить это: исправить ipdb, чтобы дать подсказку (Pdb), исправить gud, чтобы не искать (Pdb) или (мой любимый) использовать что-то еще либо на стороне gud, либо на стороне ipdb.

Проблема с установкой gud заключается в том, что она довольно старая и, на мой взгляд, немного скрипичная, используя глобальные переменные и не использующую структуры данных Emacs Lisp, доступные, кроме списков и cons-ячеек. Полное переписывание gud называется realgud, оно в настоящее время находится в MELPA и в какой-то момент будет также в ELPA. Однако сейчас он не поддерживает ipdb. Существуют инструкции для того, как можно было бы добавить поддержку ipdb.

Второй вариант - использовать что-то еще, поэтому позвольте мне предложить Python trepan debugger, который уже интегрирован в realgud (но не gud since Я считаю тупик). Хотя обратные трассировки, которые он дает, не совсем похожи на ipdb, они раскрашивают их и исходный код.