스레드 애플리케이션 디버깅

이 장에서는 스레드 애플리케이션을 디버깅하는 방법을 배웁니다. 또한 디버깅의 중요성에 대해서도 배웁니다.

디버깅이란?

컴퓨터 프로그래밍에서 디버깅은 컴퓨터 프로그램에서 버그, 오류 및 이상을 찾고 제거하는 프로세스입니다. 이 프로세스는 코드가 작성 되 자마자 시작되고 코드가 다른 프로그래밍 단위와 결합되어 소프트웨어 제품을 형성함에 따라 연속 단계로 계속됩니다. 디버깅은 소프트웨어 테스트 프로세스의 일부이며 전체 소프트웨어 개발 수명주기의 필수적인 부분입니다.

Python 디버거

Python 디버거 또는 pdbPython 표준 라이브러리의 일부입니다. 찾기 어려운 버그를 추적하기위한 좋은 대체 도구이며 결함이있는 코드를 빠르고 안정적으로 수정할 수 있습니다. 다음은 가장 중요한 두 가지 작업입니다.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)

다음은 Python 디버거의 h (help) 명령 데모입니다.

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

pdb에서 'p (print)'명령을 사용한 후이 스크립트는 '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)