Emacs:Python调试方法

9
我使用emacs进行所有代码编辑需求。通常,我会使用M-x compile运行我的测试运行器,这可以让我完成大约70%的工作来保持代码正常运行,但是最近我一直在思考如何在需要时使用M-x pdb来打断点并检查事物。
在我的搜索中,我发现了一些东西,表明这是有用/可行的。然而,我尚未成功地使其以我完全理解的方式工作。
我不知道是buildout + appengine的组合可能使它更加困难,但当我尝试做类似以下的事情时:
M-x pdb
Run pdb (like this): /Users/twillis/projects/hydrant/bin/python /Users/twillis/bin/pdb /Users/twillis/projects/hydrant/bin/devappserver /Users/twillis/projects/hydrant/parts/hydrant-app/

其中.../bin/python是由buildout生成的解释器,路径设置为所有的eggs。

~/bin/pdb是一个简单的脚本,用于使用当前python解释器调用pdb.main。

HellooKitty:hydrant twillis$ cat ~/bin/pdb
#! /usr/bin/env python

if __name__ == "__main__":
    import sys
    sys.version_info
    import pdb
    pdb.main()
HellooKitty:hydrant twillis$ 

.../bin/devappserver是buildout配方为gae项目创建的dev_appserver脚本,.../parts/hydrant-app是app.yaml的路径

我首先会看到一个提示符

Current directory is /Users/twillis/bin/
C-c C-f

什么都没有发生,只有

HellooKitty:hydrant twillis$ ps aux | grep pdb
twillis    469 100.0  1.6   168488  67188 s002  Rs+   1:03PM   0:52.19 /usr/local/bin/python2.5 /Users/twillis/projects/hydrant/bin/python /Users/twillis/bin/pdb /Users/twillis/projects/hydrant/bin/devappserver /Users/twillis/projects/hydrant/parts/hydrant-app/
twillis    477   0.0  0.0  2435120    420 s000  R+    1:05PM   0:00.00 grep pdb
HellooKitty:hydrant twillis$ 

有些事情正在发生

C-x [space]

会报告已设置断点。但我无法使事情顺利进行。

感觉我在这里漏掉了一些明显的东西,是吗?

因此,在Emacs中进行交互式调试是否值得?Google App Engine应用程序中是否可能进行交互式调试?您有任何关于如何使其工作的建议吗?


这是一个针对Stack Overflow的问题。 - user113292
1个回答

4

嗯,你的做法和我不太一样。我没有尝试过你的方法。我直接使用pdb库模块,没有包装脚本,只使用“-m”python命令行选项告诉python将模块作为脚本运行。

为了过分谨慎,这里是我的操作步骤:

  1. 在EMACS中按Alt-X键,输入“pdb”,然后回车。
  2. EMACS提示我“Run pdb (like this):”,我输入“python -m pdb myprogram.py”。
  3. EMACS创建一个pdb的调试器模式窗口,在其中可以给调试器命令,并跟踪源代码中程序的执行。

我想这可能与appengine不兼容。我建议先用简单的Python程序使其正常工作,一旦知道它能正常工作,再尝试升级到完整的应用程序。

实际上,我不使用pdb进行大量的Python调试。我的大部分调试都是基本的“printf调试”,即在我的单元测试和(偶尔)实际代码中插入打印语句来完成的。


谢谢divegeek。我会尝试一下。我希望我可以在emacs中拥有一个真正集成的体验,就像你一样,我没有太多需要交互式调试的需求,因为我尽量保持单元测试的最新状态,但偶尔我会遇到gae api不按预期行事的情况,我宁愿在给定点处进行检查,而不是尝试单元测试来探索api。 - Tom Willis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接