Ну, не совсем, это просто список всех вещей, которые я считаю модными и полезными при использовании pdb в Python.
Итак, прежде всего, как мне поставить точку останова?
import pdb; pdb.set_trace()
Да, один лайнер, все, что вы хотите.
Хорошо… теперь я хочу увидеть вещи.
Вы можете получить глобальные и локальные переменные, просто позвонив:
locals() globals()
Это отобразит все переменные в области видимости с их значениями. Необычно, да?
Ты можешь использовать:
dir()
Если вас не очень интересуют ценности. Но… если мы что-то просим, мы можем захотеть увидеть все.
И да, вы, возможно, сейчас жалуетесь на то, что весь код помещается в одну строку, и его чертовски трудно читать.
Просто красивая распечатка. Как? Нравится:
pp locals() # pretty print
Ага, аккуратно!
И наконец... не заморачивайтесь над кодом. Вы никогда не знаете, когда закончите отладку. На прошлой неделе я отлаживал код с другом, и мы закончили просмотр трассировок из библиотеки многопоточности. Не круто, когда вы действительно хотите сосредоточиться на других вещах.
Итак, ярлыки для перемещения по линиям:
s # step n # next r # return c # continue
Итак, шаг — это всего лишь одна строка. Вы выполняете строку, которая находится под вашим курсором, и останавливаетесь, как только можете остановиться.
Next очень похож, но немного эффективнее. Основное отличие заключается в том, что next будет выполнять вызываемые функции почти на полной скорости и переходить к следующей строке в текущей функции, тогда как step будет выполняться строка за строкой в текущей и вызываемой функциях.
Возврат очень удобен, когда вы застряли в коде, который не хотите проверять. В основном он возвращается к точке возврата текущей функции, которую вы выполняете.
И, наконец, продолжайте. Да, все идет прямо к следующей точке останова.
Есть и другие полезные приемы для pdb, но я в основном использую их и хочу поделиться с вами. Проверьте документы (да, RTFM и F означает Fancy), чтобы узнать больше!
Удачного взлома!