2012-09-28 2 views
29

ipython에서 함수의 첫 번째 줄을 밟을 수있는 방법이 있습니까? 나는 같이 무언가를 상상 : ipdb를 실행하고 foo의 첫 번째 줄에 중단 점을 설정IPython에서 함수로 들어가기

%step foo(1, 2) 

.

지금이 작업을 수행하려면 함수의 소스 코드로 가서 import ipdb; ipdb.set_trace() 행을 추가해야합니다.

+1

'% step'과 같은 기능은 없습니다. '% run -d' 전체 스크립트를 실행할 수 있지만, 단일 명령문 또는 함수 호출에 대해 동일한 작업을 수행 할 수는 없습니다. 'pdb.run ("foo (1, 2)")'또는'pdb.runcall (foo, 1, 2)'를 수동으로 할 수 있습니다. – abarnert

+0

나는 오늘도 똑같은 것을 궁금해하고 있었다. 나는 그것이 가능하다면이 모든 것을 사용할 것이다. 그것이 어떻게 구현 될 수 있는지보기 위해 iPython 소스를 조사 할 시간. –

+0

[IPython에서 디버깅을 사용하여 명령을 실행할 수 있습니까?] (https://stackoverflow.com/questions/9689378/is-it-possible-to-run-commands-in-ipython-with-debugging) –

답변

42

ipdb는 올해 초 0.7부터 runcall, runeval 및 run을 지원합니다. pdb.runcall처럼 사용할 수 있습니다 :

In [1]: def foo(a, b): 
    ...:  print a + b 
    ...: 

In [2]: import ipdb 

In [3]: ipdb.runcall(foo, 1, 2) 
> <ipython-input-1-2e565fd9c4a4>(2)foo() 
     1 def foo(a, b): 
----> 2  print a + b 
     3 

ipdb> 
+0

그게 내가 필요한 것 같아. 0.7 업데이트를 지적 해 주셔서 감사합니다. 이전 버전이 있습니다. 그것 때문에 아마 runcall을 사용하는 ipython 마법을 추가하는 것이 쉽습니다. –

+8

실제로 외부 ipdb가 필요 없다는 것이 밝혀졌습니다.'IPython.core.debugger import Pdb;에서 할 수 있습니다. ipdb = Pdb()'. –

+1

가장 우아한 방법은 아닙니다. 저는 그러한 공통적 인 필요성에 대한 마법의 기능을 기대했습니다. SciPy 사용자에게 공통적 인 필요성이 아닌지 궁금합니다. –

관련 문제