Python jest całkiem fajny, ale niestety jego debugger nie jest tak dobry jak perl -d.Debuger w języku Python: wchodzenie w funkcję, którą wywołałeś interaktywnie
Jedno, co robię bardzo często podczas eksperymentowania z kodem jest wywołanie funkcji z poziomu debuggera, i krok w tej funkcji, tak jak poniżej:
# NOTE THAT THIS PROGRAM EXITS IMMEDIATELY WITHOUT CALLING FOO()
~> cat -n /tmp/show_perl.pl
1 #!/usr/local/bin/perl
2
3 sub foo {
4 print "hi\n";
5 print "bye\n";
6 }
7
8 exit 0;
~> perl -d /tmp/show_perl.pl
Loading DB routines from perl5db.pl version 1.28
Editor support available.
Enter h or `h h' for help, or `man perldebug' for more help.
main::(/tmp/show_perl.pl:8): exit 0;
# MAGIC HAPPENS HERE -- I AM STEPPING INTO A FUNCTION THAT I AM CALLING INTERACTIVELY
DB<1> s foo()
main::((eval 6)[/usr/local/lib/perl5/5.8.6/perl5db.pl:628]:3):
3: foo();
DB<<2>> s
main::foo(/tmp/show_perl.pl:4): print "hi\n";
DB<<2>> n
hi
main::foo(/tmp/show_perl.pl:5): print "bye\n";
DB<<2>> n
bye
DB<2> n
Debugged program terminated. Use q to quit or R to restart,
use O inhibit_exit to avoid stopping after program termination,
h q, h R or h O to get additional info.
DB<2> q
Jest to niezwykle przydatne podczas próby krok po kroku obsługa różnych danych wejściowych w celu wyjaśnienia przyczyny niepowodzenia. Jednak wydaje się, że nie działa on ani w pdb, ani pydb (pokazałbym równoważny przykład z pythona do powyższego, ale spowodował duży zrzut stosu wyjątków).
Więc moje pytanie jest dwojaki:
- Am I czegoś brakuje?
- Czy istnieje debuger w języku Python, który rzeczywiście pozwoliłby mi to zrobić?
Oczywiście mogłem umieścić wywołania w kodzie osobiście, ale uwielbiam pracować interaktywnie, np. nie trzeba zaczynać od zera, gdy chcę spróbować wywołać z nieco innym zbiorem argumentów.
czy możesz zaakceptować ostatnią odpowiedź? – sureshvv
OP odpowiedział na swoje pytanie na dole: https://stackoverflow.com/a/228653/5512755 – Dunatotatos