Вы можете использовать модуль pdb, вставить pdb.set_trace() куда угодно, и он будет функционировать как точка останова.
>>> import pdb >>> a="a string" >>> pdb.set_trace() --Return-- > <stdin>(1)<module>()->None (Pdb) p a 'a string' (Pdb)
Для продолжения выполнения используйте c (или cont или continue).
С помощью pdb можно выполнять произвольные выражения Python. Например, если вы обнаружите ошибку, вы можете исправить код, а затем ввести выражение типа, чтобы оно имело тот же эффект в запущенном коде.
ipdb - это версия pdb для IPython. Она позволяет использовать pdb со всеми функциями IPython, включая завершение табуляции.
Его цель - предоставить все тонкости современных отладчиков на основе графического интерфейса пользователя в более легком пакете, удобном для работы с клавиатурой. PuDB позволяет вам отлаживать код прямо там, где вы его пишете, и тестировать - в терминале. Если вы работали с превосходными (но на сегодняшний день устаревшими) инструментами Turbo Pascal или C на базе DOS, пользовательский интерфейс PuDB может показаться знакомым.
Отлично подходит для отладки автономных скриптов, просто запустите
python -m pudb.run my-script.py
Ответ 3
Если вы используете pdb, вы можете определить псевдонимы для ярлыков. Я использую эти:
# Ned's .pdbrc
# Print a dictionary, sorted. %1 is the dict, %2 is the prefix for the names. alias p_ for k insorted(%1.keys()): print"%s%-15s= %-80.80s" % ("%2",k,repr(%1[k]))
# Print the instance variables of a thing. alias pi p_ %1.__dict__ %1.
# Print the instance variables of self. alias ps pi self
# Print the locals. alias pl p_ locals() local:
# Next and list, and step and list. alias nl n;;l alias sl s;;l
# Short cuts for walking up and down the stack alias uu u;;u alias uuu u;;u;;u alias uuuu u;;u;;u;;u alias uuuuu u;;u;;u;;u;;u alias dd d;;d alias ddd d;;d;;d alias dddd d;;d;;d;;d alias ddddd d;;d;;d;;d;;d
Модуль ведения журнала позволяет вам указать уровень важности; во время отладки вы можете регистрировать все, в то время как во время обычной работы вы можете регистрировать только важные вещи. Вы можете отключать и включать эти функции.
Большинство людей просто используют базовые инструкции print для отладки, а затем удаляют инструкции print. Лучше оставить их включенными, но отключить; затем, когда у вас возникнет другая ошибка, вы можете просто снова включить все и просмотреть свои журналы.
Это может быть наилучшим возможным способом отладки программ, которым необходимо выполнять действия быстро, например сетевых программ, которым необходимо отреагировать до того, как на другом конце сетевого соединения истечет время ожидания и оно исчезнет. Возможно, у вас не так много времени, чтобы запустить отладчик за один шаг; но вы можете просто позволить своему коду выполняться и регистрировать все, затем просмотреть журналы и выяснить, что происходит на самом деле.
# Your program goes here. # You can access command-line arguments using the args variable.
if __name__ == '__main__': main()
И вот его объяснение того, как использовать вышеприведенное. Опять же, я не получаю за это похвалы:
По умолчанию модуль ведения журнала печатает критические сообщения, сообщения об ошибках и предупреждающие сообщения. Чтобы изменить это так, чтобы печатались все уровни, используйте:
$ ./your-program.py --logging=debug
Чтобы отправлять сообщения журнала в файл с именем debug.log, используйте: