gpt4 book ai didi

python - Emacs:调试 python 的方法

转载 作者:太空狗 更新时间:2023-10-29 21:51:04 27 4
gpt4 key购买 nike

我在 programmers.stackexchange.com 上发布了这个,但我认为它可能更适合 SO。

我使用 emacs 来满足我所有的代码编辑需求。通常,我会使用 M-x compile 来运行我的测试运行器,我会说这让我得到了我需要做的大约 70% 的事情来保持代码正常运行但是最近我一直想知道如何使用 M-x pdb on遇到断点并检查事物会很好的场合。

在我的谷歌搜索中,我找到了 some things这表明这是有用的/可能的。但是,我还没有设法让它以我完全理解的方式工作。

我不知道是不是 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 是解释器构建的地方,其中包含为所有鸡蛋设置的路径。

~/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 是构建配方为 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 appengine 应用程序?关于如何使它正常工作有什么建议吗?

最佳答案

GAE 的一个具体问题是它将 STDOUT 重定向到浏览器,包括调试器输出。

pdb documentation 中所述,通常的工作流程是在你需要的地方在代码中设置一个断点。通常你会做 import pdb; pdb.set_trace(),但对于 GAE,您还需要获取 STDIN 和 STDOUT。例如,这个代码片段:

def set_trace():
import pdb, sys
debugger = pdb.Pdb(stdin=sys.__stdin__,
stdout=sys.__stdout__)
debugger.set_trace(sys._getframe().f_back)

然后在 emacs 中启动一个 shell 并从那里运行您的代码:

$ ./bin/devappserver /Users/twillis/projects/hydrant/parts/hydrant-app/

为了在 emacs 中轻松访问 shell 交互缓冲区中的正确位置,我使用 poptoshell.el(谷歌它,我没有足够的声誉来添加另一个链接)

最后,确保你有一个足够新的 python-mode 版本,它包含 pdbtrack 功能(你几乎肯定有,但你肯定想要它,因为它提供了在 emacs 中单步执行代码的方法)。

关于python - Emacs:调试 python 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4542504/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com