Python 很酷,但不幸的是,它的调试器不如 perl -d。
在试验代码时,我经常做的一件事是从调试器中调用一个函数,然后进入该函数,如下所示:
# 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
这在尝试单步执行函数对各种不同输入的处理以找出失败的原因时非常有用。但是,它似乎在 pdb 或 pydb 中都不起作用(我将展示一个与上述示例等效的 python 示例,但它会导致大量异常堆栈转储)。
所以我的问题是双重的:
- 我错过了什么吗?
- 是否有一个 python 调试器确实可以让我这样做?
显然我可以自己将调用放入代码中,但我喜欢交互式工作,例如。当我想尝试使用一组略有不同的参数进行调用时,不必从头开始。