pdb.set_trace()调用后,pdb不响应

3
我有一个父进程调用它的子进程。我在子进程代码中放置了import pdb; pdb.set_trace()
当我使用python -m pdb parent.py启动父进程时,它会被冻结。调试器不会响应我输入的任何命令。但是当我按下quitcontinue时,它确实退出了代码。
看起来pdb工作了,但没有产生任何输出。
$ python -m pdb parent.py
n -m pdb parent.py
> d:\scripts\parent.py(53)<module>()
-> '''
(Pdb) c

现在它停止响应了。

根据中断后我得到的跟踪信息,它停留在pdb.set_trace()调用之后的那一行。

>>>>>>>>>>>>>[2013.06.13-10:02:06] : accessed by child.py
Traceback (most recent call last):
File "child.py", line 40, in <module>
    sys.stderr = open(Definition_h.ErrLog, 'a', 0, encoding=Definition_h.utf8)
File "d:\scripts\Definition_h.py", line 863, in unicodeOpen
    def unicodeOpen(*args, **kwargs):
File "C:\Program Files (x86)\Python 2.5.4\lib\bdb.py", line 50, in trace_dispatch
    return self.dispatch_call(frame, arg)
File "C:\Program Files (x86)\Python 2.5.4\lib\bdb.py", line 79, in dispatch_call
    self.user_call(frame, arg)
File "C:\Program Files (x86)\Python 2.5.4\lib\pdb.py", line 134, in user_call
    self.interaction(frame, None)
File "C:\Program Files (x86)\Python 2.5.4\lib\pdb.py", line 187, in interaction
    self.cmdloop()
File "C:\Program Files (x86)\Python 2.5.4\lib\cmd.py", line 148, in cmdloop
    import readline
KeyboardInterrupt: !!!<unprintable KeyboardInterrupt object>
Error in sys.excepthook:

你是否真的启动了一个真实的“进程”来运行“child.py”,还是只是将其作为一个模块导入?也许你可以发布调用“parent.py”脚本中的“child.py”的代码。 - BergmannF
如果你通过调试器运行它会发生什么?那也会卡住吗? - doctorlove
@Gjallar 实际上是通过 os.system("child.py") 调用的。 - astronaut
@doctorlove,不,它不会挂起。 - astronaut
1
@astronaut 好的,不幸的是我只能在我的Linux系统上测试您的场景,而且我无法重现错误 - 也许您可以尝试使用更现代的subprocess模块(http://docs.python.org/2/library/subprocess.html)并查看是否有效。 - BergmannF
实际上问题在于我的代码将 sys.stdout 重定向到了日志文件。 - astronaut
2个回答

6
实际上,问题在于我的代码正在将 sys.stdout 重定向到日志文件。

2
哈哈。实际上给你点赞,因为这可能并不是一个罕见的错误。 - Bite code

0

我的错误在于脚本以带有“&”符号的后台模式启动。

因此,我得到了pdb提示,但没有任何命令会执行。


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