[python] 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. 나는 %debugcell-1의 첫 번째 줄 을 설정하려고했습니다 . 그러나 cell-2를 실행하기 전에도 즉시 디버그 모드로 들어갑니다.

  2. %debug코드 바로 앞에 줄 을 추가하려고 했습니다 return do_some_thing_about(b). 그러나 코드는 영원히 실행되고 멈추지 않습니다.

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



답변

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)

한 줄씩 실행 n하고 함수를 사용 s하고 디버깅 프롬프트를 종료하려면 c.

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


답변

ipdbjupyter 내부에서 다음과 같이 사용할 수 있습니다 .

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

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

from IPython.core.debugger import set_trace

set_trace()중단 점이 필요한 곳에 추가하십시오 . 입력 help에 대한 ipdb입력 필드가 나타나면 명령.


답변

반환 함수는 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)


답변

Python 3.7에서는 breakpoint () 함수를 사용할 수 있습니다 . 그냥 입력

breakpoint()

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


답변

그냥 입력 import pdbjupyter 노트북에, 다음이 사용 쪽지를 디버그. 매우 편리합니다.

c-> 계속, s-> 단계, b 12-> 12 행에 중단 점 설정 등.

일부 유용한 링크 :
파이썬 공식 문서 PDB에 , 파이썬 PDB 디버거의 예를 더 잘 이해하기위한 방법 디버거 명령을 사용하는 방법 .

유용한 스크린 샷 :
여기에 이미지 설명 입력여기에 이미지 설명 입력


답변

오류가 발생하면 다음 셀에서 실행 %debug하면됩니다.