파이참(Pycharm) 디버깅 활용법 8가지

디버깅(debugging)이란?

PyCharm은 파이썬 개발을 위한 강력한 통합 개발 환경(IDE)로, 디버깅 도구가 잘 갖추어져 있어 개발자들에게 매우 유용하다. 다음은 PyCharm의 디버깅 모드를 유용하게 사용하는 몇 가지 기법들을 소개한다.

 

 

디버거 실행하기

1. 파이참 우측 상단의 초록색 벌레 모양 누르기
2. 상단의 Run>Debug 선택하기
3. 단축키 alt+shift+F9 누르기

 

파이참 디버깅 싫행화면

 

< 예시코드 >

아래 예시 코드는 버블 정렬 알고리즘(몰라도됨)을 사용하여 주어진 리스트를 오름차순으로 정렬하는 간단한 함수인데,
이 예시 코드로 디버깅 연습을 해보겠다.

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        # 마지막 i개의 요소는 이미 정렬되어 있으므로 제외
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                # 두 요소를 교환하여 정렬
                arr[j], arr[j+1] = arr[j+1], arr[j]


# 정렬되지 않은 리스트 생성
my_list = [64, 34, 25, 12, 22, 11, 90]

# 정렬 함수 호출
bubble_sort(my_list)

# 정렬된 리스트 출력
print("정렬된 리스트:", my_list)


중단점(Breakpoint) 설정

중단점은 프로그램 실행 중지 지점을 설정하는 기능이다. 소스 코드 옆 원하는 라인 옆에 빈 공간을 클릭하거나 ctrl+F8을 눌러
중단점을 설정할 수 있다. 중단점이 설정된 라인에서 프로그램 실행은 중단된다.

 

< 중단점 예시 >

‘bubble_sort’ 함수 내부에 중단점을 설정한다. 라인 2의 ‘n=len(arr)’줄 옆 빈공간을 클릭하여 중단점을 아래와 같이 설정한다.

 

파이참 디버깅 중단점 설정

설정하고 벌레를 누르면 아래와 같이 결과가 나오는데 함수 내부의 n=len(arr)가 실행 되지 못했으므로 정렬되지 않은 리스트 생성까지 실행이 이뤄지고,

정렬 함수 호출 이후에 함수 내부에서 실행이 중단된 것으로 보인다.

 

중단점 설정 후 코드실행결과

변수값 확인

디버깅모드에서 변수값이 궁금한 해당라인에 우클릭을하고
“Add to Watches”를 선택하거나 변수 이름위에 마우스를 올리면 변수 값이 표시된다.

 

디버깅 변수값 확인

 

< 변수값 확인 예시 >

my_list = [64, 34, 25, 12, 22, 11, 90] 라인에 우클릭하고 “Add to Watches”를 클릭하면 우측에 변수값이 나타난다.

 

변수값 확인 예시

 

 

Step Over (F8), Step Into (F7), Step Out (Shift + F8)

디버깅 모드에서 코드를 한 줄씩 실행하는 단축키들이다.

Step Over는 현재 줄을 실행하고 다음 줄로 이동한다. 단축키 F8
Step Into는 현재 줄의 함수 호출이 있을 경우 해당 함수 내부로 이동한다. 단축키 F7
Step Out은 현재 함수의 실행을 끝내고 해당 함수를 호출한 곳으로 돌아간다. 단축키 Shift + F8

< Step Over (F8), Step Into (F7), Step Out (Shift + F8) 예시 >

F8을 눌러 한줄씩 실행시켜보면 i값과 j값이 for문을 통해 바뀌면서 루프를 돌며 실행하는 것을 관찰할 수 있다.
i,j 값을 한줄씩 실행시키며 확인해보자.

 

디버깅 step over 예시

 

 

프로그램 실행 재개(F9)

디버깅 모드에서 프로그램을 계속 실행하려면 F9을 눌러 재개시키면 된다.

 

< 프로그램 실행 재개 예시>

F9 버튼을 디버깅 모드에서 누르면 실행 완료되어 정렬된 리스트: [11, 12, 22, 25, 34, 64, 90]

위와같이 정렬된 리스트 값이 출력된다.

 

 

조건부 중단점

중단점을 설정할때, 특정 조건을 만족할 때만 중단되도록 설정할 수 있다. 중단점을 우클릭하고 “Edit Breakpoint”를 선택한 후
“Condition”란에 조건식을 작성하여 사용한다.

 

< 조건부 중단 예시>

우클릭하여 Edit breakpoint를 클릭하고 condition에 다음과 같이 작성해본다.
len(my_list)>=20
my_list 리스트의 길이가 20이상일 경우에만 디버깅 모드를 실행하겠다는 말이다. 벌레를 눌러 디버깅모두를 실행해보면
중간에 중단되지 않고 전체 코드가 다 실행되는 결과를 볼 수 있다.

 

디버깅 조건부 중단점 예시

 

 

Exception Breakpoint

예외가 발생한 경우 프로그램을 중단시키는 Exception Breakpoint 를 설정할 수 있다.
“Run” 메뉴 -> “View Breakpoints”를 선택하여 “Exception Breakpoints” 창에서 추가할 수 있다.

 

< Exception Breakpoint 예시>

Exception Breakpoint를 활용해 보기위해 숫자를 0으로 나누는 경우를 발생하는 코드를 추가해보자.

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        # 마지막 i개의 요소는 이미 정렬되어 있으므로 제외
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                # 두 요소를 교환하여 정렬
                arr[j], arr[j+1] = arr[j+1], arr[j]
                

def divide_numbers(a, b):
    try:
        result = a / b
    except ZeroDivisionError as e:
        print("Error: ", e)
        result = None
    return result

# 함수 호출
result1 = divide_numbers(10, 2)
result2 = divide_numbers(5, 0)
result3 = divide_numbers(8, 4)

# 결과 출력
print("Result 1:", result1)
print("Result 2:", result2)
print("Result 3:", result3)


# 정렬되지 않은 리스트 생성
my_list = [64, 34, 25, 12, 22, 11, 90]

# 정렬 함수 호출
bubble_sort(my_list)

# 정렬된 리스트 출력
print("정렬된 리스트:", my_list)

위 코드에서 divide_numbers 함수는 두 개의 숫자를 나누는 함수이다. 그러나 이 함수를 사용할 때, 두 번째 인자인 b가 0인 경우 ZeroDivisionError 예외가 발생할 수 있다. 이 예외를 처리하기 위해 try-except 구문을 사용하여 예외를 처리하고, 에러 메시지를 출력한다.

 

Exception Breakpoint 설정 예시

 

이제 벌레를 눌러 디버깅모드를 실행시키면 divide_numbers 함수를 호출한다.
첫 번째 호출은 10을 2로 나누기 때문에 예외가 발생하지 않는다.
두 번째 호출은 5를 0으로 나누기 때문에 ZeroDivisionError 예외가 발생한다. 이때 Exception Breakpoint가 작동하여 프로그램이 중단된다.
디버그 창에서 예외 정보를 확인할 수 있다. 에러 메시지와 호출 스택 정보 등이 표시된다.

 

exception 중단점 예시 결과

 

 

Remote Debugging (원격 디버깅)

PyCharm은 원격 서버에서 실행 중인 코드를 디버깅할 수 있다. 원격 서버에서 PyCharm Remote Debugging 설정을 하고, 로컬 PyCharm에서 “Run” 메뉴 -> “Attach to Process”를 선택하여 원격 서버와 연결할 수 있다.


		

Leave a Comment