如何同时使用调试器和curses?

11 投票
3 回答
2507 浏览
提问于 2025-04-15 18:59

我在运行 python -m pdb myapp.py 的时候,如果出现了错误,通常会跳回到 pdb 这个调试工具,让我可以检查问题。但是现在这个错误是在我调用了 curses.wrapper() 之后出现的,这时候程序进入了 curses 模式,这让 pdb 调试工具变得没用了。我该怎么解决这个问题呢?

3 个回答

0

使用 pyclewn

你可以在 vim 中使用 pyclewn。或者使用 pdb-clone,它是 pyclewn 的核心部分。这个工具很好用,类似于 gdb,还可以进行远程调试。

6

如果你对Python不太熟悉,这个可能不是你想要的。不过,听说winpdb可以连接到一个脚本,就像gdb可以连接到一个正在运行的程序一样(我理解的没错的话)。

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

别被名字误导了,它是可以在不同平台上使用的。

10

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/中有简要提到。

撰写回答