В этой главе мы узнаем, как отлаживать потоковые приложения. Мы также узнаем важность отладки.
Что такое отладка?
В компьютерном программировании отладка — это процесс поиска и устранения ошибок, ошибок и отклонений от компьютерной программы. Этот процесс начинается, как только код написан, и продолжается последовательно, так как код объединяется с другими единицами программирования, образуя программный продукт. Отладка является частью процесса тестирования программного обеспечения и является неотъемлемой частью всего жизненного цикла разработки программного обеспечения.
Python Debugger
Отладчик Python или pdb является частью стандартной библиотеки Python. Это хороший запасной инструмент для отслеживания трудно обнаруживаемых ошибок, позволяющий быстро и надежно исправить неисправный код. Ниже приведены две наиболее важные задачи отладчика pdp:
- Это позволяет нам проверять значения переменных во время выполнения.
- Мы можем пройти по коду и установить точки останова также.
Мы можем работать с pdb следующими двумя способами:
- Через командную строку; это также называется посмертной отладкой.
- Путем интерактивного запуска pdb.
Работа с pdb
Для работы с отладчиком Python нам нужно использовать следующий код в том месте, где мы хотим взломать отладчик:
import pdb; pdb.set_trace()
Рассмотрим следующие команды для работы с pdb через командную строку.
- ч (помощь)
- д (вниз)
- и (вверх)
- б (перерыв)
- сл (прозрачный)
- л (список))
- п (следующий))
- с (продолжение)
- с (шаг)
- г (возврат))
- б (перерыв)
Ниже приведена демонстрация команды h (help) отладчика Python:
import pdb pdb.set_trace() --Call-- >d:\programdata\lib\site-packages\ipython\core\displayhook.py(247)__call__() -> def __call__(self, result = None): (Pdb) h Documented commands (type help <topic>): ======================================== EOF c d h list q rv undisplay a cl debug help ll quit s unt alias clear disable ignore longlist r source until args commands display interact n restart step up b condition down j next return tbreak w break cont enable jump p retval u whatis bt continue exit l pp run unalias where Miscellaneous help topics: ========================== exec pdb
пример
Работая с отладчиком Python, мы можем установить точку останова в любом месте скрипта, используя следующие строки:
import pdb; pdb.set_trace()
После установки точки останова мы можем запустить скрипт в обычном режиме. Скрипт будет выполняться до определенного момента; до тех пор, пока не была установлена линия. Рассмотрим следующий пример, где мы будем запускать скрипт, используя вышеупомянутые строки в разных местах скрипта:
import pdb; a = "aaa" pdb.set_trace() b = "bbb" c = "ccc" final = a + b + c print (final)
Когда приведенный выше скрипт выполняется, он будет выполнять программу до a = «aaa», мы можем проверить это в следующем выводе.
Выход
--Return-- > <ipython-input-7-8a7d1b5cc854>(3)<module>()->None -> pdb.set_trace() (Pdb) p a 'aaa' (Pdb) p b *** NameError: name 'b' is not defined (Pdb) p c *** NameError: name 'c' is not defined
После использования команды p (print) в pdb этот скрипт печатает только aaa. Это сопровождается ошибкой, потому что мы установили точку останова до a = «aaa».
Точно так же мы можем запустить скрипт, изменив точки останова и увидев разницу в выходных данных —
import pdb a = "aaa" b = "bbb" c = "ccc" pdb.set_trace() final = a + b + c print (final)
Выход
--Return-- > <ipython-input-9-a59ef5caf723>(5)<module>()->None -> pdb.set_trace() (Pdb) p a 'aaa' (Pdb) p b 'bbb' (Pdb) p c 'ccc' (Pdb) p final *** NameError: name 'final' is not defined (Pdb) exit
В следующем скрипте мы устанавливаем точку останова в последней строке программы —
import pdb a = "aaa" b = "bbb" c = "ccc" final = a + b + c pdb.set_trace() print (final)
Выход выглядит следующим образом —