【Python】 Visual Studio code로 phthon Debugging

(python) Visual Studio code로 phthon Debugging/ Run python file 단축키 만들기

핵심 배운점

  • 나의 현재 문제점
    1. 코드(main.py)를 처음부터 똑바로 안봤다. torch.utils.data.dataset이 아니라, build_dataset이었는데.. 아무 생각 없이 패스했다.
    2. dataloader의 파라미터 중에서 collate_fu이 정말 중요했는데, 이것도 무시했다.
    3. 이건* 나중에 보자!라는 마음으로 패스하고, 나중에 그걸* 안봐서 너무 힘들었다.
    4. 내가 지금 뭐하지는 모르고 계속 했던거 또하고 했던거 또했다.
  • 해결책
    1. 정말 하나하나! 꼼꼼히! 순서대로! 부셔야 한다.
    2. 그냥 아무 생각없이 디버깅 하기 전에 아래의 방법** 중 지금의 에러를 해결하기 위해 사용해야하는 방법이 무엇인지 진지하게 생각하고! 들어가자. 손부터 움직이지 말고 머리를 쓰자.
    3. 좌절하지 말자. 포기하지 말자. 할 수 있다. 아자아자
  • 최적의 디버깅 방법**이 무엇인가?
    • 코드 직접 수정하기
    • pdb 이용하기 / pdb의 interact 이용하기
    • python debuger 이용하기 / Watch, Debug console이용하기
    • (위의 방법 섞기)
    • 코드를 직접 수정하기 + pdb이용하기
    • 코드를 직접 수정하기 + Python debuger를 이용하기

1. F5

F5를 눌러 디버깅을 시작할 수 있다. 이때 ctrl+F5를 누루면, start without debugging이므로, 디버깅을 하고 싶으면 F5를 눌러야 한다.

2. breaking point

다음과 같이 하나의 코드에 대해 breakpoint(line 옆에 빨간점)을 찍으면 왼쪽 하단에 breakpoints라고 정보들이 표시되는 것을 알수 있다.

img

3. 왼쪽 바 읽기

img

순서대로 알아보다면 다음과 같다.

  • variables : 내가 지금 위치하고 있는 함수 내부의 변수들을 확인할 수 있다.
  • watch : 내가 좀더 유심히 보고 싶은 변수를 직접 +버튼을 통해 추가하고, 그렇게 추가한 변수를 유심히 관찰할 때 용이하다.
  • call stack : 현재 function call stack에 대한 정보를 알 수 있다. 현재 어떤 함수 위에 있는지 확인할 수 있다. 맨 아래 있는 함수가 main 함수 이겠고, 맨 위에 있는 함수가 현재 내가 위치하고 있는 함수이다.

4. step 나아가기

img

  • continue : 다음 break point를 만날때까지 코드를 진행해 나간다.
  • step over : 한 Line씩 코드를 읽어 나간다. 외부 함수를 만나면 그 함수 내부로 들어가며 디버깅하지 않는다.
  • step into : 한 Line씩 코드를 읽어 나간다. 외부 함수를 만나면 그 함수 내부로 들어가며 디버깅을 한다.

  • restart : 전체 코드를 처음부터 다시 디버깅 한다.

5. print 대신 Log Message

디버깅을 할 때, 우리는 멍청하게 print를 해서 디버깅을 해왔다. 그러지말고 log message를 이용해 보자.

img

다음과 같이 메세지를 추가해 놓으면, pinrt와 똑같은 역활을 한다. 변수는 {}내부에 적으면 된다. 그리고 debug console을 확인하면 lob message가 남아있는 것을 확인할 수 있다.

위의 message를 “ findtime = {findtime(N,K)} “ 라고 쓰면 Debug console에 findtime =1 이라고 이쁘게 나온다.

주의사항!

  1. print하고 싶은 변수는 그 line이전에 정의되어 있어야 한다. 그리고 이것은 break point가 아니기 때문에, F5로 멈추지 않는다.

  2. log message를 치고 엔터를 누르고, breakpoint가 마름모 모양이 되어있어야한다.

6. Expression

이곳에는 if문에 적는 것을 그대로 적는다고 생각하면 된다. 이 문장이 true라면 그 때 break가 된다.

이 방법은 for문이 많이 도는 상황에서 사용하기에 매우 적절하다,

img

이 표현식이 True일 때만 저 점이 breakpoint로 작동한다.

img

7. Raised Exceptions

img

여기 있는 Raised Exceptions를 누르면 어떤 예외 상황이 발생할 때. 그 부분에 예외 정보를 보다 정확하게 그려 넣어준다.

img

내가 만약 try except문을 사용한다면, 이 방법을 이용하면 좋을 듯 하다.

8. How debug Python script with arguments

9. check variable while debugging

  • watch를 이용해서 변수 값을 check해도 되지만…
  • 그냥 코드안의 변수 위에 마우스 올려 놓으면, 변수 체크 가능하다!
    image

10. CALL STACK 을 잘보면 핵꿀

  • 우리는 보통 함수가 호출하고, 호출하고, 호출하고, 뭘 return하고, 뭘 return하고, 뭘 return하고 를 중심으로 Github에서 피키지 탐방을 한다.
  • 이럴때 Call Stack을 보면 핵꿀이다.
  • VScode 에서는 Call Stack에서 어떤 함수가, 무슨 함수에게 호출되어서 이 파일이 열린것인지, 한눈에 파악할 수 있게 시각화(하이라이트) 해준다.
  • Call Stack에 있는 파일들을 클릭하면, 그 파일 속에서 저장된 변수들을 볼 수 있다.
  • 즉 watch에 적어놨던 변수들이, 다른 함수의 호출로 파일이 넘어가서, 값이 보이지 않을 때! Call Stack에 있는 해당파일을 클릭하면 변수 값이 다시 보인다.

11. DEBUG CONSOLE

여기서 pdb하는 것과 똑같은 공간이다.

image

12. 패키지 내부 코드를 수정해라

watch, debug console만 이용하려하지 말고 코드 자체 내용을 바꿔서 디버깅을 해봐라

예를 들어서 아래와 같은 작업은 watch, debug console에서 못한다!

for x,y in data_loader:
    print(type(x))
	print(len(y))

13. tensorboad

  1. tensorboard 설치 : conda install -c conda-forge tensorboard
  2. tensorflow 설치 (?)
  3. ctrl+shift+p -> python : launch tensorboard

reference lin


© All rights reserved By Junha Song.