Вопрос

Я звоню python -m pdb myapp.py, когда возникает исключение, и я обычно возвращаюсь к интерпретатору pdb для изучения проблемы.Однако это исключение генерируется после того, как я вызвал через curses.wrapper() и перешел в режим проклятий, сделав интерпретатор pdb бесполезным.Как я могу обойти это?

Это было полезно?

Решение

Ответ Джеймса хороший, и я поддержал его, но я бы также подумал о попытке разделить уровни логики и представления моей программы.Сохраните часть curses тонким слоем поверх библиотеки и напишите простой драйвер, который вызывает правильные процедуры для воссоздания ошибки.Затем вы можете погрузиться и сделать то, что необходимо.

Другой способ, который я могу придумать, - это создать функцию, вызываемую debug или что-то, что возвращает вас к обычному экрану и вызывает pdb.Затем вставьте его непосредственно перед кодом, который вызывает исключение, и запустите свою программу.Что - то вроде

def debug(stdscr):
    curses.nocbreak()
    stdscr.keypad(0)
    curses.echo()
    curses.endwin()
    import pdb; pdb.set_trace()

По-видимому, это похоже на то, что делается с curses.wrapper функция.Это кратко упоминается на http://www.amk.ca/python/howto/curses/.

Другие советы

Не будучи знакомым с Python, это может быть не совсем то, что вы хотите.Но, по-видимому, winpdb может подключаться к скрипту - точно так же, как gdb может подключаться к запущенному процессу (IIUC).

http://winpdb.org/docs/launch-time/

Пусть название не вводит вас в заблуждение, оно не зависит от платформы.

используйте pyclewn

вы можете использовать пайклунн с vim.или используйте pdb-clone, ядро pyclewn он хорош, похож на gdb, может выполнять удаленную отладку

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top