티스토리 뷰

목차

    반응형

    파이썬 pdb 사용, 디버깅 방법과 실행, 종료 (리눅스 공통)


    디버깅 모드로 코드를 수행하기 위해 다음의 함수를 사용할 수 있습니다.


    pdb.run(statement[, globals[, locals]])

    • 디버깅 모드로 해당 구문을 수행
    • 호출 직후 코드를 실행하지 않은 채로 디버그 프롬프트가 나타남


    pdb.runeval(expression[, globals[, locals]])

    • 기본적으로 pdb.run() 함수와 같지만 runeval() 함수가
    • 반환할 때 해당 구문의 결과를 반환하지만, 차이점 존재


    pdb.runcall(function[, argument, ...])

    • 디버깅 모드로 해당 함수를 호출
    • 함수로 진입한 직후 디버그 프롬프트가 나타남

    파이썬 코드 예. IDLE이나 Command의 python.exe를 수행하고 아래와 같이 입력합니다.


    1
    2
    3
    4
    5
    6
    >>> import pdb
    >>> import pdbtest
    >>> pdb.run("pdbtest.ExternalPrint()")
    > <string>(1)<module>()
     
    (Pdb)
    cs


    (Pdb)라는 프롬프트가 뜬다면 디버깅 모드로 들어온 것입니다.


    디버깅 모드에서는 지정된 명령어로 코드를 수행하고, 변수의 값을 확인하는 일을 할 수 있습니다.




    지정된 파이썬 pdb 명령어는 아래와 같습니다.


    q (quit)

    디버거를 종료


    l (list) [시작 값[, 끝값]]

    현재 파일의 소스코드 라인을 보여줌. 특별한 인자가 주어지지 않으면 현재 실행 중인 코드를 바탕으로 11줄 정도를 보여줌


    b (break) [[파일 이름:]라인|함수[, 조건]]

    인자로 전달된 '라인'/'함수'에 브레이크 포인트를 설정. '조건'이 입력된 경우에는 해당 조건을 만족하는 경우에만 코드 실행이 멈춤. 아무런 인자 없이 'b' 명령어가 입력된 경우, 모든 브레이크 포인트 리스트와 상태, 히트된 횟수가 출력됨


    cl (clear) [브레이크_포인트_숫자, ...]

    브레이크 포인트 삭제


    enable [브레이크_포인트_숫자, ...]

    인자로 전달된 브레이크 포인트를 활성화


    disable [브레이크_포인트_숫자, ...]

    인자로 전달된 브레이크 포인트를 비활성화


    condition 브레이크_포인트_숫자 [조건]

    해당 브레이크 포인트가 조건이 참인 경우에만 활성화. 만약 조건이 없는 경우, 해당 브레이크 포인트에 존재하던 조건이 삭제됨


    p (print) '표현식'

    표현 식의 값을 출력


    s (step)

    현재 행을 수행하고 다음 행에서 멈춤. 만약 현재 행이 함수 호출인 경우, 함수 내부로 들어가서 수행.


    n (next)

    현재 행을 수행하고 다음 행에서 멈춤. setp과 다른 것은 현재 행이 함수 호출인 경우, 함수 내부로 들어가지 않고 함수를 한 번에 완료하고 다음 행으로 이동


    r (return)

    현재 함수가 반환될 때까지 연속적으로 코드를 수행


    c (continue)

    다음 브레이크 포인트를 만날 때까지 연속적으로 코드를 수행


    w (where)

    현재 스택 프레임을 출력. 가장 최근의 스택 프레임이 하위에 위치함


    a (args)

    현재 함수의 전달된 인자를 출력


    u (up)

    상위 스택 프레임으로 이동


    d (down)

    하위 스택 프레임으로 이동


    h (help)

    명령어 도움말을 확인


    파이썬 디버깅 pdb[파이썬 디버깅 pdb]


    위의 명령어는 축약어(r, q 형태)로 사용하거나, 전체 이름을(return, quit 형태) 모두 입력할 수 있습니다.


    r을 입력해 ExternalPrint() 종료될 때까지 수행해 보겠습니다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    (Pdb) r
    Count: 0, Message: Apple
    Count: 1, Message: Apple
    Count: 2, Message: Apple
    Count: 3, Message: Apple
    Count: 4, Message: Apple
    Count: 0, Message: Banana
    Count: 1, Message: Banana
    Count: 2, Message: Banana
    Count: 3, Message: Banana
    Count: 0, Message: Orange
    Count: 1, Message: Orange
    Count: 2, Message: Orange
    --Return--
    > <string>(1)<module>()->None
    (Pdb) q
    cs


    이번 예제에서는 브레이크 포인트를 설정하지 않았기 때문에 화면에 메시지를 출력하고 정상적으로 종료됩니다.


    함수에 반환 값이 없었기 때문에 None이 반환되는 것을 확인할 수 있습니다.


    q를 눌러 디버거를 종료합니다.


     파이썬 pdb 사용, 디버깅 방법과 실행, 종료 (리눅스 공통)

    반응형