Python 단계별 코드 실행
이 자습서에서는 Python 디버거를 사용하여 코드를 단계별로 실행하는 방법에 대해 설명합니다.
PDB라는 명령줄 도구에 대해 처음부터 설명하겠습니다. 또한 Python IDLE의 도움으로 코드를 단계별로 실행하는 방법도 배웁니다.
pdb
모듈을 사용하여 Python에서 코드 단계별 실행
다른 프로그래밍 언어와 마찬가지로 Python에는 Python Debugger를 나타내는 pdb
라는 Python 스크립트를 디버깅하기 위한 훌륭한 도구도 있습니다.
운영 체제에 Python을 설치할 때마다 이미 설치되어 있으므로 별도로 pdb
를 설치할 필요가 없습니다. Python이 설치되어 있으면 터미널에서 작동합니다.
pdb
모듈은 디버깅 시간을 엄청나게 줄여주는 도구입니다. 실행 중인 프로그램의 상태를 검사하는 데 도움이 됩니다. 이를 실험하고, 변수 값을 변경하고, 다른 인수로 함수를 호출하고, 코드 조각을 실행하는 등의 작업을 수행할 수 있습니다.
일반적인 print
문보다 훨씬 강력하며 테스트와는 다른 그림을 제공합니다. 우리의 테스트는 코드가 예상대로 작동하지 않는다는 것을 나타낼 뿐이며 디버깅을 통해 프로그램 실행 중에 어떤 일이 발생하는지 확인할 수 있습니다.
이제 PyCharm IDE가 이미 있고 PyCharm IDE에서 코드를 디버깅할 수 있는데 왜 pdb
를 사용하는지 궁금할 것입니다. pdb
를 사용하는 이유는 때때로 실제 상황에서 일부 서버에서 Python 스크립트를 실행할 수 있기 때문입니다.
일반적으로 이러한 서버에서는 IDE를 사용할 여유가 없습니다. Python 스크립트를 디버깅하려면 터미널을 사용해야 합니다. 그래서 우리는 명령줄 도구 pdb
를 사용하여 Python 스크립트를 디버깅하는 방법을 보여줄 것입니다.
pdb
모듈에는 set_trace()
라는 중단점이 있습니다. 이 기능을 사용하면 다양한 변수 값을 검사하고 원하는 작업을 수행할 수 있는 중단점이 생깁니다.
프로그램에 두 줄의 코드만 삽입하면 됩니다. 그런 다음 명령줄 작업을 통해 다양한 작업을 수행할 수 있습니다. 우리는 이것을 곧 보여줄 것입니다.
코드로 이동하기 전에 몇 가지 다른 명령줄 작업에 대한 요약을 볼 수 있습니다.
운영 | 설명 |
---|---|
n |
그러면 다음 코드 줄이 실행됩니다. |
c |
이 작업은 코드 실행을 계속하고 실행을 완료합니다. |
l |
이 작업은 실행 중인 라인 전후의 3개 라인을 나열하므로 방금 실행된 3개의 라인을 볼 수 있습니다. |
s |
함수 호출을 시작할 수 있습니다. 이제 함수에 들어갈 때 n 을 사용하면 전체 함수를 실행하고 함수 호출 후 다음 줄로 진행합니다. |
s 를 사용하면 함수를 한 줄씩 실행할 수 있습니다. |
|
b |
중단점을 설정할 수 있습니다. 프로그램 내부에 b 명령을 넣어 여러 중단점을 설정할 수 있습니다. |
b[int] |
b 다음에 정수를 설정하여 숫자의 특정 줄에 중단점을 설정할 수 있습니다(예: b10 ). |
b[func] |
b 다음에는 대괄호 없이 함수 이름에 중단점을 설정하는 함수 이름이 옵니다. |
cl |
모든 중단점을 지웁니다. |
cl[int] |
정수가 뒤따르는 cl 은 특정 줄 번호에서 중단점을 지웁니다. 공백은 선택 사항입니다. cl10 또는 cl 10 을 입력할 수 있습니다. 아무런 차이가 없습니다. |
p |
우리는 또한 인쇄 옵션이 있습니다. 변수 x 가 있다고 가정해 보겠습니다. 파이썬 셸에 입력하면 x 값이 출력됩니다. |
괄호와 함께 p 문을 사용할 수 있습니다. 괄호 안에 변수를 넣기만 하면 됩니다. |
더 많은 작업이 가능합니다. 여기에서 자세한 내용을 읽고 알아볼 수 있습니다.
작은 프로그램을 입력한 예를 살펴보겠습니다. 아무 것도 하지 않습니다. 일부 변수 값, print
문을 설정하고 일부 수학적 기능을 수행합니다.
pdb
를 가져온 다음 set_trace()
함수를 사용하여 중단점을 설정한 것을 볼 수 있습니다.
import pdb
def transform(x, y):
x *= 2
y = y ** 2
z = x + y
return z
x = 50
y = 60
z = 5
n = 1000
pdb.set_trace()
transform(5, 10)
print("z =" + str(z))
n = transform(2, 3)
print("n =" + str(n))
프로그램이 작동하는 방식과 디버거가 일부 기능을 분석하는 데 사용되는 방식을 살펴보겠습니다. 따라서 프로그램을 실행할 때 디버거 명령 프롬프트에 Python을 입력한 것을 볼 수 있습니다.
실행할 다음 줄은 transform()
함수이므로 가장 먼저 할 일은 목록 l
을 보는 것입니다. 이전에 실행한 세 줄과 다음에 실행할 세 줄을 보여주고 ->를 사용하여 현재 우리가 어디에 있는지 보여줍니다.
이제 n
명령을 사용하여 전체 transform()
기능을 수행하고 15행으로 이동하는 다음 라인을 실행하는 옵션이 있습니다. 또는 s
를 사용하여 transform()
함수를 transform()
함수 내에서 한 줄씩 실행하고 내부에서 어떤 일이 일어나는지 확인합니다.
n
을 사용하여 무슨 일이 있었는지 확인합니다. n
을 사용하여 transform()
함수를 실행했습니다.
변수 값을 인쇄하려면 변수 이름을 입력할 수 있지만 n
이 다음 실행 라인을 제공하기 때문에 n
을 인쇄할 수 없습니다.
대안은 n
변수를 괄호 안에 넣어 값을 인쇄하는 동안 p()
명령을 사용하는 것입니다.
우리가 설정한 다른 중단점을 보려면 b
명령을 사용할 수도 있습니다. 따라서 b
를 입력하면 아무 것도 반환하지 않지만 16행에 또 다른 중단점을 설정할 수 있습니다. 이제 를 입력하면 b
, 중단점을 나열합니다.
cl
은 모든 중단점을 지웁니다. 예라고 하면 중단점을 삭제합니다.
함수 이름에 중단점을 설정할 수도 있습니다. 그렇게 하면 transform()
함수의 시작 부분에 중단점이 설정되므로 해당 함수에 들어갈 때마다 transform()
함수로 들어가게 됩니다.
c
를 입력하면 다음 중단점까지 계속되고 c
를 입력하면 코드가 종료됩니다.
버전 3.7에 도입된 새로운 내장 함수인 breakpoint()
함수를 사용하여 코드를 디버깅할 수 있습니다.
파이썬 공식 문서에 따르면, 기본적으로 우리는 기본적으로 breakpoint()
를 사용하여 pdb.set_trace()
를 호출합니다. pdb
를 가져오고 set_trace()
를 호출할 필요가 없습니다. 이를 사용하는 대신 동일하게 작동하는 breakpoint()
를 사용할 수 있습니다.
Python IDLE을 사용하여 Python에서 코드 단계별 실행
이 섹션에서는 Python IDLE을 사용하여 Python 프로그램을 디버깅하는 방법을 보여줍니다. 설명하기 위해 두 개의 숫자를 더하는 예를 들어 보겠습니다.
n1 = int(input("Enter a first number :"))
n2 = int(input("Enter a second number :"))
Res = n1 + n2
print(n1, "+", n2, Res)
Python IDLE에서 디버거를 사용하려면 먼저 디버거를 켜서 Python IDLE을 열어야 합니다. Python IDLE을 연 후 상단에 있는 디버그 옵션을 열 수 있습니다.
클릭하면 디버그 제어 창이 나타납니다. 여기에서 디버그가 켜져 있는 것을 볼 수 있습니다.
열면 디버그 제어 창을 볼 수 있습니다. 이 제어 창은 비활성 상태이며 어디에서나 클릭할 수 없습니다.
활성화하려면 f5를 누른 상태에서 Python 스크립트를 실행해야 합니다.
디버그 제어 창에는 여러 개의 버튼이 있습니다. 버튼의 이름은 go
, step
, over
, out,
및 quit
입니다. go
를 누르면 입력을 입력하고 입력을 입력한 후 출력을 제공하도록 요청합니다. 그렇지 않으면 막힐 것입니다.
out
을 사용하면 코드 실행을 완료하고 프로그램의 단계별 실행을 표시하지 않도록 함수를 실행한다고 가정합니다. 프로그램을 실행하고 출력을 보여줍니다. 단계별 실행을 건너뛸 때 유용합니다.
이 프로그램이 어떻게 작동하는지, 어떤 라인이 실행되는지, 이 프로그램이 어떻게 흐르는지 보려면 이 단계 이상을 사용할 수 있습니다. 단계
옵션은 프로그램에 대한 모든 정보를 제공합니다.
프로그램이 내부적으로 어떻게 작동하는지 알고 싶지 않고 어떤 라인이 실행되고 있는지만 알고 싶다면 가장 좋은 옵션은 over
입니다. 마지막은 그만두기
입니다. quit
을 사용하면 프로그램 실행 중에 종료됩니다.
다음은 Python IDLE을 사용하는 디버거 작업입니다.
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn