Отладка потоковых приложений
В этой главе мы узнаем, как отлаживать потоковые приложения. Мы также узнаем о важности отладки.
Что такое отладка?
В компьютерном программировании отладка - это процесс поиска и удаления ошибок, ошибок и отклонений в компьютерной программе. Этот процесс начинается, как только код написан, и продолжается в последовательных этапах, когда код объединяется с другими модулями программирования для формирования программного продукта. Отладка - это часть процесса тестирования программного обеспечения и неотъемлемая часть всего жизненного цикла разработки программного обеспечения.
Отладчик Python
Отладчик Python или pdbявляется частью стандартной библиотеки Python. Это хороший резервный инструмент для отслеживания труднодоступных ошибок и позволяет нам быстро и надежно исправить неисправный код. Следующие две самые важные задачиpdp отладчик -
- Это позволяет нам проверять значения переменных во время выполнения.
- Мы можем пошагово выполнять код и также устанавливать точки останова.
Мы можем работать с pdb двумя способами:
- Через командную строку; это также называется посмертной отладкой.
- Интерактивно запустив pdb.
Работа с pdb
Для работы с отладчиком Python нам нужно использовать следующий код в том месте, где мы хотим взломать отладчик:
import pdb;
pdb.set_trace()
Рассмотрим следующие команды для работы с pdb через командную строку.
- h(help)
- d(down)
- u(up)
- b(break)
- cl(clear)
- l(list))
- n(next))
- c(continue)
- s(step)
- r(return))
- b(break)
Ниже приведена демонстрация команды 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)
Результат выглядит следующим образом -
--Return--
> <ipython-input-11-8019b029997d>(6)<module>()->None
-> pdb.set_trace()
(Pdb) p a
'aaa'
(Pdb) p b
'bbb'
(Pdb) p c
'ccc'
(Pdb) p final
'aaabbbccc'
(Pdb)