programing

iPython 노트북에서 디버그하는 올바른 방법은 무엇입니까?

stoneblock 2023. 10. 16. 21:28

iPython 노트북에서 디버그하는 올바른 방법은 무엇입니까?

제가 알기로는.%debug magic하나의 셀 내에서 디버그를 수행할 수 있습니다.

하지만 여러 개의 셀에 걸쳐 함수 호출이 있습니다.

예를들면,

In[1]: def fun1(a)
           def fun2(b)
               # I want to set a breakpoint for the following line #
               return do_some_thing_about(b)

       return fun2(a)

In[2]: import multiprocessing as mp
       pool=mp.Pool(processes=2)
       results=pool.map(fun1, 1.0)
       pool.close()
       pool.join

시도한 내용:

  1. 설정하려고 했습니다.%debug1에.그러나 셀-2를 실행하기도 전에 바로 디버그 모드로 들어갑니다.

  2. 추가하려고 했습니다.%debugreturn do_some_thing_about(b)되고 절대 않습니다 하지만 코드는 영원히 실행되고 절대 멈추지 않습니다.

ipython 노트북에서 중단점을 설정하는 올바른 방법은 무엇입니까?

합니다.ipdb주피터 내부에 위치:

from IPython.core.debugger import Tracer; Tracer()()

편집: 위의 기능은 IPython 5.1 이후로 더 이상 사용되지 않습니다.이것이 새로운 접근 방식입니다.

from IPython.core.debugger import set_trace

더하다set_trace()당신이 필요로 하는 곳에서.ehelp위해서ipdb입력 필드가 나타나면 명령을 실행합니다.

ipdb 사용

다음을 통해 설치

pip install ipdb

용도:

In[1]: def fun1(a):
   def fun2(a):
       import ipdb; ipdb.set_trace() # debugging starts here
       return do_some_thing_about(b)
   return fun2(a)
In[2]: fun1(1)

줄 단위로 실행하는 경우와 함수로 들어가는 단계의 경우 사용하고 디버깅 프롬프트에서 종료하는 경우 사용합니다.

사용 가능한 명령의 전체 목록: https://appletree.or.kr/quick_reference_cards/Python/Python%20Debugger%20Cheatsheet.pdf

파이썬 3.7에서는 breakpoint() 함수를 사용할 수 있습니다.그냥들어가기

breakpoint()

런타임을 중지하고 싶은 곳에서 동일한 pdb 명령(r, c, n, ...)을 사용하거나 변수를 평가할 수 있습니다.

반환 함수는 def 함수(메인 함수)에 해당되며, 한 개의 탭을 제공해야 합니다.그리고 사용

%%debug 

대신에

%debug 

라인 뿐만 아니라 전체 셀을 디버그합니다.희망, 아마 이게 당신에게 도움이 될 겁니다.

모든 셀에 항상 추가할 수 있습니다.

import pdb; pdb.set_trace()

디버거가 그 선에서 멈출 겁니다예를 들어,

In[1]: def fun1(a):
           def fun2(a):
               import pdb; pdb.set_trace() # debugging starts here
           return fun2(a)

In[2]: fun1(1)

한 후 에서 만 실행합니다.%debug그리고 이것이 마지막입니다.

마법 명령어도 사용하기 좋습니다.그냥 말해요.%pdb on에도 pdb디버거는 콜 스택의 깊이에 관계없이 모든 예외에 대해 실행됩니다.아주 편리합니다.

경우가 , 하거나(!) %debug다른 사람들이 제안해온 마법 명령.

만 하면 됩니다.import pdb주피터 노트북에 저장된 다음 이 치트시트를 사용하여 디버그합니다.아주 편리합니다.

c--> 계속합니다.s -->계,b 12--> 행 으로 설정합니다.--> 12번을합니다입니다.

몇 가지 유용한 링크:pdb관한 파이썬 공식 문서, 파이썬 pdb 디버거 예는 디버거 명령을 사용하는 방법을 더 잘 이해하기 위한 것입니다.

유용한 스크린샷 몇 가지:

방금 픽시디버거를 발견했습니다.아직 테스트할 시간이 없었음에도 불구하고 ipdb로 ipython에서 사용하는 방법을 디버깅하는 것이 가장 비슷한 방법인 것 같습니다.

enter image description here

또한 "평가" 탭이 있습니다.

네이티브 디버거가 주피터랩의 확장으로 제공되고 있습니다.몇 주 전에 출시된 이 버전은 xeus-python 커널(ipykernel 사용자에게 잘 알려진 마법 없이 제공됨) 뿐만 아니라 관련 확장 기능을 제공하여 설치할 수 있습니다.

jupyter labextension install @jupyterlab/debugger
conda install xeus-python -c conda-forge

이를 통해 다른 IDE와 잘 알려진 시각적 디버깅 경험이 가능합니다.

enter image description here

출처 : 주피터용 시각 디버거

VsCode에서

파일 -> Preferences -> Settings -> Open Settings (JSON) [오른쪽 위 작은 페이지 아이콘]

이 코드 줄을 끝에 붙여넣기

"jupyter.experimental.debugging": true

이제 상단 탐색 모음에 디버그 옵션이 표시됩니다.

enter image description here

언급URL : https://stackoverflow.com/questions/32409629/what-is-the-right-way-to-debug-in-ipython-notebook