ks_ks
@ks_ks

Умный pdb_trace() — как поставить брейкпоинт на конкретную итерацию?

Программа во время работы выводит в stdout весь лог.


Сейчас, для отладки использую:

«c» => «ENTER», «c» => «ENTER», «c» => «ENTER», «c» => «ENTER», «c» => «ENTER»


Требуется реализовать тоже самое на автомате, двумя из следующих вариантов, описанных в вопросах:

1. брейк-поинтом, который укажет, на какой из таких итераций нужно установиться — тогда вопрос заключается в том, как такой поставить?

2. как поставить условие остановить исполнения кода, по вхождению определенного текста(текст ошибки мне знаком и возникает единожды, ровно на этом моменте и нужно остановить)?


P.S.> И ещё мелкий вопрос — как отмотать назад\вперед на несколько шагов(или один шаг), next'ов и continue'ов?


P.P.S> 2 варианта, которые указал — это единственные решения, или есть ещё какие-то, которые проще реализуются?
  • Вопрос задан
  • 3153 просмотра
Решения вопроса 1
@MikhailEdoshin
Можно просто жать Enter — он повторяет последнюю введенную команду. Удобно также пользоваться n[ext] — он выполняет команды, не заходя в вызываемые функции или unt[il] — выполняет команды до тех пор, пока не окажется строчкой ниже (т. е. если в последней строчке цикла сказать until, он промотает весь цикл и остановится на следующей команде. Чтобы поставить условный breakpoint, нужно сказать b[reak] ([file:]lineno | function)[, condition], например, break 42, a = 5. Команда перехода к нужной строке — j[ump]. Вот насчет отлавливания типичной ошибки не скажу — таким не пользуюсь. Но вообще такое вроде есть — например, можно завернуть вызов программы в собственный try/except, отловить ошибку, посмотреть ее текст, и если совпадает — запустить отладчик (вот тут не помню, как из кода его запустить), чтобы посмотреть стек вызовов (w[here]).

Кстати, он вам ошибку выводит, а traceback не печатает, что ли?

См. также руководство к модулю и внутреннюю справку (h[elp]).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы