【问题标题】:Using a debugger and curses at the same time?同时使用调试器和诅咒?
【发布时间】:2011-01-14 02:21:04
【问题描述】:

我正在调用python -m pdb myapp.py,当异常触发时,我通常会被退回到 pdb 解释器来调查问题。但是,在我通过curses.wrapper() 调用并进入curses 模式后,会引发此异常,从而使pdb 解释器无用。我该如何解决这个问题?

【问题讨论】:

标签: python exception interpreter curses pdb


【解决方案1】:

使用 pyclewn

你可以在 vim 中使用pyclewn。 或者使用 pdb-clone,pyclewn 的核心 不错,和gdb一样,可以远程调试

【讨论】:

  • 根据该链接不再支持 Pyclewn。
【解决方案2】:

James 的回答很好,我对此表示赞同,但我也会考虑尝试拆分程序的逻辑层和表示层。将 curses 部分保留在库之上的一个薄层,并编写一个简单的驱动程序,该驱动程序调用正确的例程来重新创建错误。然后你可以潜入并做必要的事情。

我能想到的另一种方法是创建一个名为debug 的函数或将您带回到常规屏幕并调用 pdb 的函数。然后将其粘贴在引发异常的代码之前并运行您的程序。类似的东西

def debug(stdscr):
    curses.nocbreak()
    stdscr.keypad(0)
    curses.echo()
    curses.endwin()
    import pdb; pdb.set_trace()

显然,这类似于 curses.wrapper 函数所做的事情。在http://www.amk.ca/python/howto/curses/ 有简要提及。

【讨论】:

  • 保持curses逻辑分离的明智建议,感谢curses.wrapper指针。
【解决方案3】:

不熟悉 Python,这可能不是您想要的。但显然,winpdb 可以附加到脚本 - 就像 gdb 可以附加到正在运行的进程 (IIUC)。

http://winpdb.org/docs/launch-time/

不要被名称误导,它是独立于平台的。

【讨论】:

  • 好建议。你打败了我。这将是解决这个问题的正确方法。对于 GUI 和守护进程也很有用。
  • 我不认为可以使用核心库的 pdb 进行附加?
  • 我不这么认为。您需要在“客户端”和“服务器”上使用 winpdb。
猜你喜欢
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 2022-08-14
  • 2014-01-12
  • 2020-09-09
  • 1970-01-01
  • 1970-01-01
  • 2016-09-26
相关资源
最近更新 更多