2016-07-14 5 views
0

Lassen Sie uns sagen, dass ich die folgende Funktion haben:ipython Debugger bietet keine Einsicht

def simple_func(): 
    a = 4 
    b = 5 
    c = a * b 
    print c 

Hier ist, was ich bekomme, wenn ich laufen %debug simple_func():

NOTE: Enter 'c' at the ipdb> prompt to continue execution. 
None 
> <string>(1)<module>() 

ipdb> 

Wenn ich n geben Sie den Debugger spuckt 20 wieder aus bei mir und gibt None zurück.

Dies ist eine vereinfachte Version dessen, was über Funktionen, Interpreter, Maschinen usw. geschieht. Was ist los? Warum kann ich meine Debugger nicht dazu bringen, das zu tun, was ich will, wenn ich nur eine sehr einfache Zeile für Zeile durchgehen muss?

+0

Haben Sie versucht, einen Haltepunkt zu setzen? – cdarke

+0

Ja, das scheint nicht zu funktionieren –

Antwort

2

Es sieht nicht wie debug funktioniert mit einer Funktion, die einfach in der ipython Sitzung definiert ist. Es muss aus einer Datei importiert werden (dh der Parameter --breakpoint übernimmt einen Dateinamen und eine Zeile).

Wenn ich eine Datei test.py

In [9]: cat test.py 
def simple_func(): 
    a = 4 
    b = 5 
    c = a * b 
    print(c) 

ich tun kann:

In [10]: import test 

In [11]: %debug --breakpoint test.py:1 test.simple_func() 
Breakpoint 1 at /home/paul/mypy/test.py:1 
NOTE: Enter 'c' at the ipdb> prompt to continue execution. 
> /home/paul/mypy/test.py(2)simple_func() 
1  1 def simple_func(): 
----> 2  a = 4 
     3  b = 5 
     4  c = a * b 
     5  print(c) 

ipdb> n 
> /home/paul/mypy/test.py(3)simple_func() 
1  1 def simple_func(): 
     2  a = 4 
----> 3  b = 5 
     4  c = a * b 
     5  print(c) 

ipdb> n 
> /home/paul/mypy/test.py(4)simple_func() 
     2  a = 4 
     3  b = 5 
----> 4  c = a * b 
     5  print(c) 
     6 

ipdb> a,b 
(4, 5) 
ipdb> n 
> /home/paul/mypy/test.py(5)simple_func() 
     2  a = 4 
     3  b = 5 
     4  c = a * b 
----> 5  print(c) 
     6 

ipdb> c 
20 
ipdb> c 
20 
ipdb> q 

es andere Möglichkeiten sein kann, diese zu verwenden, aber dies scheint einfachste zu sein, die meisten gerade nach vorne ein. Ich benutze selten den Debugger. Stattdessen teste ich Code-Snippets interaktiv in Ipython und streue meine Skripte mit Debugging prints.

Verwandte Themen