使用 Emacs 调试 Python(Twisted)

  • 打开您的项目文件。有时,如果您事先没有打开它们,Emacs 可能无法找到它们。

  • 确保您的 PATH 中有一个名为 pdb 的程序,其内容如下

    #!/bin/sh
    exec python -m pdb $1 $2 $3 $4 $5 $6 $7 $8 $9
    
  • 在 Emacs 中运行 M-x pdb。如果您通常以 python foo.py 的方式运行程序,您的命令行应该是 pdb foo.py,对于 twistdtrial,只需在命令行中添加 -b,例如:twistd -b -y  my.tac

  • 当 pdb 等待您的输入时,转到代码中的某个位置,然后按 C-x SPC 插入断点。pdb 应该会显示一些提示信息。您可以在需要的地方设置多个断点。

  • 转到您的 pdb 缓冲区,然后按 c;这将像往常一样运行,直到找到断点。

  • 到达断点后,使用 s 进行单步执行,n 运行当前行而不单步执行它调用的函数,w 打印当前堆栈,ud 在堆栈中上移和下移一层,p foo 打印表达式 foo 的结果。

  • 有效调试的建议

    • 经常使用 p self;仅仅知道当前代码所在的类在大多数情况下是不够的。

    • 使用 w 来确定您的位置,它将重新显示当前行/箭头。

    • 在使用 w 之后,使用 ud 以及更多 p self 在不同的堆栈级别上。

    • 如果您需要理解一个大型代码路径,请打开另一个缓冲区并在其中列出代码路径(例如,我遇到过一个非常糟糕的 Deferred 递归,这对我帮助很大)。

脚注