2012-04-24 16 views
8

Lubię testować funkcje w Python interpreter. Czy jest możliwe debugowanie funkcji w Python interpreter, gdy chcę zobaczyć więcej niż wartość zwracana i efekt uboczny?Kod debugowania w interprerze Pythona

Jeśli tak, czy można wyświetlić podstawowe operacje debuggera (, uruchamiając funkcję z argumentami, ustawiając punkt przerwania, następny krok, krok w, oglądając zmienną)? Jeśli nie, w jaki sposób debugujesz funkcję w inny sposób?

Chodzi o to, że chcę debugować tylko konkretną funkcję, która będzie dostarczana z argumentami. Nie chcę debugować całego kodu modułu.

dziękuję za poradę

+1

Szukałeś 'pdb' z Google? – hochl

+0

@hochl Myślałem, że pdb jest aplikacją (coś podobnego do gdb dla języka C) i nie wiedziałem, że to moduł. Spróbuję, jeśli uda się debugować określoną funkcję. – xralf

+0

To jest - "pdb" jest drogą, przeczytaj [opis modułu] (http://docs.python.org/library/pdb.html). – hochl

Odpowiedz

6

Jeśli chcesz debugować specyficzną funkcję można za pomocą tego -

>>> import pdb 
>>> import yourmodule 
>>> pdb.run('yourmodule.foo()') 

nad linią poleceń. pdb.set_trace() należy dodać do funkcji, aby się tam włamać.

Więcej informacji na temat WPB można zobaczyć tutaj - http://docs.python.org/library/pdb.html

+1

Czy mogę znaleźć numery wierszy, w których powinienem ustawić punkt przerwania w tłumaczu lub czy powinienem go znaleźć w edytorze? – xralf

+0

OK, teraz rozumiem. Powinienem umieścić 'pdb.set_trace()' w moim kodzie źródłowym. Dobra robota, dziękuję. Nie rozumiałem tego wcześniej. – xralf

6

Zobacz moduł pdb. Wstaw w kod:

import pdb 
pdb.set_trace() 

... tworzy punkt przerwania.

1

debug code-to-nie musi być zmodyfikowany, aby zawierać pdb.set_trace(). Że połączenie może być dokonane bezpośrednio w tłumacza tuż przed debugowania kodu-to-:

>>> import pdb 
>>> pdb.set_trace(); <code-to-debug> 

Na przykład, biorąc pod uwagę test_script.py z następującego kodu:

def some_func(text): 
    print 'Given text is {}'.format(repr(text)) 
    for index,char in enumerate(text): 
     print ' '*index, char 

sesja interpretera debugowania some_func pomocą debugger polecenia krok-INTO (s), a następnie (n) i dalej (c) wyglądałby następująco:

>>> import pdb 
>>> import test_script 
>>> pdb.set_trace(); test_script.some_func('hello') 
--Call-- 
> c:\src\test_script.py(1)some_func() 
-> def some_func(text): 
(Pdb) s 
> c:\src\test_script.py(2)some_func() 
-> print 'Given text is {}'.format(repr(text)) 
(Pdb) n 
Given text is 'hello' 
> c:\src\test_script.py(3)some_func() 
-> for index,char in enumerate(text): 
(Pdb) c 
h 
    e 
    l 
    l 
    o 
>>> 

Zobacz docs dla modułu pdb uzyskać więcej informacji na temat korzystania z debugera: http://docs.python.org/library/pdb.html

Dodatkowo podczas korzystania z debugera, komenda help zapewnia piękny listę poleceń i help <command> daje pomóc specyficzne dla danej komendy.

Powiązane problemy