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

Можно ли удалить набор точек останова с помощью ipdb.set_trace()?

Я использовал ipdb.set_trace() где-то в моем коде Python. Можно ли игнорировать эту точку прерывания с помощью команды IPDB?

clear сообщает мне, что он очистил все точки останова, но IPDB останавливается снова, когда он натыкается на строку с помощью ipdb.set_trace().

disable 1 говорит мне: No breakpoint numbered 1 ignore 1 говорит: Breakpoint index '1' is not valid

Чтобы уточнить: Конечно, я мог бы просто удалить точку останова из моего исходного кода. Но для этого потребуется выйти из отладчика и запустить его снова. Часто для этого требуется много работы, и перезапуск отладчика усложняет жизнь. Также, если существует огромный цикл, и вы хотите проверять объекты в цикле, проще всего разместить точку останова в цикле непосредственно после объекта. Как я мог пропустить цикл (и все тысячи вызовов set_trace()) и выполнить код после цикла с помощью next?

4b9b3361

Ответ 1

Хорошо, вы можете воспользоваться тем фактом, что что-либо в Python является объектом. Хотя в отладчике вы можете сделать что-то вроде этого:

def f(): pass
ipdb.set_trace = f

set_trace все равно будет вызываться, но ничего не сделает. Конечно, он несколько постоянен, но вы можете просто сделать

reload ipdb

и вы получите оригинальное поведение.

(зачем вы это делаете, когда вы случайно ставите точку останова в часто называемой функции, которая обычно вызывается под try/except.Как вы понимаете, что вы останавливаете 1000 раз в этой функции, вы пытаетесь ctrl- c, но это попадает в try/except, и вы снова вернетесь в ipdb. Итак, если вы используете код низкого уровня, убедитесь, что ваш set_traces имеет некоторый контекст:

if myvar in ['some', 'sentinel', 'values']:
    ipdb.set_trace()

и др.

Ответ 2

После обучения у Корли

ipdb.set_trace = lambda: None

Работает для меня.

Ответ 3

Запуск программы также должен точно указать, где вы установили idb.set_trace() при ее ударе (в противном случае попробуйте команды where или bt). Затем вы можете удалить эту строку из файла и перезапустить программу.

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