Подтвердить что ты не робот

Выход из Python Debugger ipdb

Я использую ipdb довольно часто, чтобы просто перейти к фрагменту кода, который изолирован, т. к. сложно написать реальный script, который его использует. Вместо этого я пишу минимальный тестовый пример с насмешкой и прыгаю в него.

Пример для рабочего процесса:

def func():
   ...
   import ipdb
   ipdb.set_trace()
   ...

def test_case():
    ...
    func()
    ...

Затем вызовите

py.test test_file.py -s -k test_case

Теперь, обычно, я просто проверяю одну или две переменные, а затем хочу выйти. Измените код и сделайте это снова.

Как мне выйти? В руководстве указано, что q завершает работу отладчика. Это не так (действительно). Вы должны бросить несколько раз, прежде чем отладчик действительно прекратит работу. Такое же поведение для Ctrl-C и Ctrl-D (с дополнительным расстройством, которое ударяет Ctrl-D несколько раз, в конце концов также покидает терминал).

Есть ли умный способ заставить бросить курить? Является ли этот рабочий процесс даже разумным? Каков стандартный способ сделать это?

4b9b3361

Ответ 1

Я поставил следующее в моем .pdbrc

import os

alias kk os.system('kill -9 %d' % os.getpid())

kk убивает отладчик и (процесс, запускающий отладчик).

Ответ 2

Следующие работали для меня:

import sys
sys.exit()

В новых версиях ipython, как упоминалось выше и ниже, это не работает. В этом случае

import os
os._exit(0)

должен все-таки сделать трюк.

Ответ 3

Это проблема с последней версией IPython 5.1.0. Вы можете проверить свою среду, используя следующий код:

pip freeze | egrep -i '^i'

Он будет разрешен с понижением до IPython == 5.0.0.

pip install ipython==5.0.0

Это работает для меня.

Ответ 4

Как упоминалось в другом ответе, это было ошибкой в ​​IPython 5.1. Он был исправлен в this pull request и больше не является проблемой из IPython 5.2 и далее. Теперь вы можете использовать q, quit() или Ctrl + d для выхода из отладчика.