Czy możesz przejść przez kod Pythona, aby pomóc w debugowaniu problemów?

W Javie / c# możesz łatwo przejść przez kod, aby prześledzić, co może pójść nie tak, a IDE czyni ten proces bardzo przyjaznym dla użytkownika.

Czy możesz prześledzić kod Pythona w podobny sposób?

Author: codeforester, 2011-02-08

11 answers

Tak! Jest debugger Pythona o nazwie pdb właśnie do tego!

Możesz uruchomić program Pythona poprzez {[0] } używając pdb myscript.py lub python -m pdb myscript.py.

Istnieje kilka poleceń, które możesz następnie wydać, które są udokumentowane na pdb Strona.

Niektóre przydatne do zapamiętania to:

  • b: ustawia punkt przerwania
  • c: Kontynuuj debugowanie, aż do osiągnięcia punktu przerwania
  • s: przejdź przez kod
  • n: aby przejść do następny wiersz kodu
  • l: wyświetla kod źródłowy bieżącego pliku (domyślnie: 11 linii, łącznie z wykonywaną linią)
  • u: poruszanie się po ramce stosu
  • d: Nawiguj w dół ramki stosu
  • p: wyświetla wartość wyrażenia w bieżącym kontekście

Jeśli nie chcesz używać debugera linii poleceń, niektóre IDE, takie jak Pydev mają debugger GUI.

 176
Author: Rovin Bhandari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-06 14:19:02

Używając interaktywnego debuggera Pythona ' pdb '

Pierwszym krokiem jest uruchomienie interpretera Pythona w trybie debugowania.

A. z linii poleceń

Najbardziej prosta droga, uruchamiana z wiersza poleceń interpretera Pythona

$ python -m pdb scriptName.py
> .../pdb_script.py(7)<module>()
-> """
(Pdb)

B. wewnątrz tłumacza

Podczas opracowywania wczesnych wersji modułów i eksperymentowania z nimi bardziej iteracyjnie.

$ python
Python 2.7 (r27:82508, Jul  3 2010, 21:12:11)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pdb_script
>>> import pdb
>>> pdb.run('pdb_script.MyObj(5).go()')
> <string>(1)<module>()
(Pdb)

C. From Within Your Program

Dla dużego projekt i długotrwały moduł, może rozpocząć debugowanie z wnętrza programu za pomocą import pdb i set_trace () tak:

#!/usr/bin/env python
# encoding: utf-8
#

import pdb

class MyObj(object):
    count = 5
    def __init__(self):
        self.count= 9

    def go(self):
        for i in range(self.count):
            pdb.set_trace()
            print i
        return

if __name__ == '__main__':
    MyObj(5).go()

Debugowanie krok po kroku, aby przejść do bardziej wewnętrznego

  1. Wykonaj polecenie next... z "n" (next)

  2. Powtórzenie ostatniego polecenia debugowania ... z ENTER

  3. Quit it all ... with " q " (quit)

  4. Drukowanie wartości zmienne ... Z "p "(print)

    A) p a

  5. Wyłączanie znaku zachęty (Pdb) ... za pomocą " c " (continue)

  6. Widząc gdzie jesteś ... z " l " (lista)

  7. Krok do podprogramów ... z " s " (krok do)

  8. Kontynuując ... ale tylko do końca bieżącego podprogramu ... z " r " (return)

  9. Przypisanie nowej wartości

    A) !b = "B"

  10. Ustaw punkt przerwania

    A) break linenumber

    B) break functionname

    C) break filename: linenumber

  11. Tymczasowy punkt przerwania

    A) tbreak linenumber

  12. Warunkowy punkt przerwania

    A) break linenumber, condition

Uwaga: * * wszystkie te polecenia powinny być wykonywane z * * pdb

Do dogłębnego wiedza, refer: -

Https://pymotw.com/2/pdb/

Https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/

 34
Author: akD,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-25 09:38:01

Istnieje moduł o nazwie 'pdb' w Pythonie. Na górze skryptu Pythona robisz

import pdb
pdb.set_trace()

I wejdziesz w tryb debugowania. Możesz użyć' s', aby wykonać krok, 'n', aby przejść do następnego wiersza, podobnie jak w przypadku debuggera 'gdb'.

 31
Author: Senthil Kumaran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-08 03:24:35

Jeśli pochodzisz z tła Java / C# to chyba najlepiej byłoby użyć Eclipse z Pydev . Daje to w pełni funkcjonalne IDE z wbudowanym debuggerem. Używam go również z django.

 3
Author: Liorsion,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-20 15:24:54

Jeśli chcesz mieć IDE ze zintegrowanym debuggerem, spróbuj PyScripter.

 2
Author: kindall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-08 03:52:44

Począwszy od Pythona 3.7, możesz użyć breakpoint() wbudowana funkcja do wprowadzania debuggera:

foo()
breakpoint()  # drop into the debugger at this point
bar()

Domyślnie, breakpoint() będzie importować pdb i zadzwoń pdb.set_trace(). Można jednak kontrolować zachowanie debugowania za pomocą sys.breakpointhook() i wykorzystanie zmiennej środowiskowejPYTHONBREAKPOINT.

Zobacz PEP 553 aby uzyskać więcej informacji.

 2
Author: Eugene Yarmash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-27 13:47:36

Programowo przechodzenie i śledzenie przez kod Pythona jest również możliwe (i to proste!). Spójrz na sys.settrace () Dokumentacja po więcej szczegółów. Również tutaj jest samouczek, aby zacząć.

 1
Author: Sandeep Datta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-12 09:58:15
 1
Author: Aaron Hoffman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-19 18:50:21

Https://wiki.python.org/moin/PythonDebuggingTools

Pudb jest dobrym zamiennikiem pdb

 1
Author: Neil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-26 13:32:09

PyCharm jest IDE dla Pythona, który zawiera debugger. Obejrzyj ten film na YouTube, aby zapoznać się z wprowadzeniem do używania debuggera PyCharm do przechodzenia przez kod.

PyCharm Tutorial-debugowanie kodu Pythona za pomocą PyCharm

Uwaga: to nie jest przeznaczone do poparcia lub przeglądu. PyCharm to produkt komercyjny, za który trzeba zapłacić, ale firma zapewnia bezpłatną licencję uczniom i nauczycielom, a także "lekką" wersję społeczności, która jest darmowa i open-source.

Zrzut ekranu

 0
Author: jim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-19 21:05:40

Możesz spojrzeć na debugger Pythona który robi dokładnie to, czego szukasz, tylko nie przez GUI

 -1
Author: Nigel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-08 03:26:45