Отладка потоковых приложений

В этой главе мы узнаем, как отлаживать потоковые приложения. Мы также узнаем о важности отладки.

Что такое отладка?

В компьютерном программировании отладка - это процесс поиска и удаления ошибок, ошибок и отклонений в компьютерной программе. Этот процесс начинается, как только код написан, и продолжается в последовательных этапах, когда код объединяется с другими модулями программирования для формирования программного продукта. Отладка - это часть процесса тестирования программного обеспечения и неотъемлемая часть всего жизненного цикла разработки программного обеспечения.

Отладчик 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)