Можно ли удалить набор точек останова с помощью 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
?
Ответы
Ответ 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
). Затем вы можете удалить эту строку из файла и перезапустить программу.
В противном случае вы можете найти этот полезным, если вы чувствуете себя более экспериментально.