根据我的阅读,有两种方法可以在 Python 中调试代码:
使用传统的调试器,例如pdb或ipdb。这支持诸如cfor continue、nfor step-over、sforstep-into等命令),但您无法直接访问 IPython shell,这对于对象检查非常有用。
pdb
ipdb
c
continue
n
step-over
s
step-into
通过在代码中嵌入IPython shell 来使用 IPython 。* 你可以做,然后在你的代码中使用。当您的程序/脚本遇到语句时,您将被放入 IPython shell。这允许使用所有 IPython 好东西来全面检查对象和测试 Python 代码。但是,在使用时,您不能再使用方便的键盘快捷键 逐步完成代码。from IPython import embed``embed()``embed()``embed() *
from IPython import embed``embed()``embed()``embed()
有什么方法可以结合两全其美?IE
可以在 MATLAB 中找到此类“增强调试”的示例,其中用户 始终 可以完全访问 MATLAB 引擎/shell,并且她仍然可以 逐步 完成她的代码、定义条件断点等。我和其他用户讨论过的,这是人们从 MATLAB 迁移到 IPython 时最怀念的调试功能。
我不想让这个问题太具体,但我主要在 Emacs 中工作,所以我想知道是否有任何方法可以将这个功能引入其中。 理想情况下 ,Emacs(或编辑器)将允许程序员在代码的任何位置设置断点,并与解释器或调试器通信,使其停在您选择的位置,并在该位置引入完整的 IPython 解释器。
你可以使用 IPython 的%pdb魔法。只需%pdb在 IPython 中调用,当发生错误时,您会自动下降到ipdb. 虽然您没有立即采取措施,但您在ipdb之后。
%pdb
这使得调试单个函数变得容易,因为您可以加载一个文件%load然后运行一个函数。assert您可以在正确的位置强制错误。
%load
assert
%pdb是线魔法。将其称为%pdb on、%pdb 1或。如果在没有参数的情况下调用它,它将作为切换。%pdb off``%pdb 0
%pdb on
%pdb 1
%pdb off``%pdb 0