python - 在 Emacs 中从 App Engine 取回 `pdb` 的控制权

标签 python google-app-engine emacs pdb

我有一个 Python Google App Engine 应用程序,我想在 Emacs 中的开发服务器上进行调试。我创建了一个 pdb 可执行文件,以便在 Emacs 中进行调试:

$ which pdb
/usr/bin/pdb
$ cat /usr/bin/pdb
#/bin/sh
exec python -m pdb "$@"

在 Emacs 中,我 M-x pdb 并收到提示 Run pdb (like this):,我在其中输入 pdb/usr/local/bin/dev_appserver。 py/Users/[person]/path/to/app/directory.

这一切开始得很顺利。我得到一个带有 (Pdb) 提示的窗口,我可以在代码的早期部分(例如某些 dev_appserver.py 文件)成功设置断点,并使用诸如 之类的命令>n 一次单步执行一行。然后我可以输入 c 继续执行程序。

问题是,一旦应用程序引擎打印出其通常的启动 INFO 消息(到 Pdb session 发生的同一缓冲区),我就不会得到 ( Pdb) 再次提示,因此我无法再输入任何 pdb 命令。这是我第一次使用 pdb 也是我第一次在 Emacs 中调试,所以也许我只是做了一些明显错误的事情。

最佳答案

@TimHoffman 有一个很好的答案。开发服务器从各种实际服务器进程重新路由 pdb,因此您将无法从命令行启动 pdb。

另一种可行的方法是从 emacs 命令行启动开发服务器(不使用 pdb),并在代码中插入 pdb 断点

import pdb
pdb.set_trace()

我通常用它来调试,但不是通过 emacs。

关于python - 在 Emacs 中从 App Engine 取回 `pdb` 的控制权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20393387/

相关文章:

python - 从源表中获取未合并的数据

google-app-engine - 清理 AppEngine BlobStore

同一窗口中的 Emacs gdb speedbar

emacs - 覆盖 emacs lisp 函数的首选方法?

python - ndb.get_multi 返回 AssertionError

haskell - Emacs 的 Haskell 缩进模式有何异同?

python - 从 Fortran 回调 Python

python - websocket 运行异步函数但返回错误 : asyncio. run() 无法从正在运行的事件循环调用

python - 是否有任何指南可用于从 Python 2.6 开始编写 Python 以编写将来可轻松迁移到 Python 3 的应用程序?

google-app-engine - Google 数据存储 - Blob 或文本