【问题标题】:pdb doesn't respond after pdb.set_trace() callpdb.set_trace() 调用后 pdb 没有响应
【发布时间】:2013-12-05 22:32:09
【问题描述】:

我有父进程调用它的子进程。我已将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:

【问题讨论】:

  • 您实际上是在启动真正的process 来运行child.py,还是只是将其作为模块导入?也许您可以发布从您的parent.py 脚本调用child.py 的代码。
  • 如果您通过调试器运行它会发生什么?那也挂了?
  • @Gjallar 实际上是通过os.system("child.py")调用
  • @doctorlove,不,它不会挂断
  • @astronaut 好吧,不幸的是,我只能在我的 Linux 机器上测试你的 szenario,而且我无法重现错误 - 也许你可以尝试使用更现代的 subprocess 模块 (docs.python.org/2/library/subprocess.html) 和看看这是否有效。

标签: python debugging pdb


【解决方案1】:

实际上问题是我的代码将sys.stdout重定向到日志文件

【讨论】:

  • 哈哈。实际上,赞成的原因可能不是一个不常见的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 2020-09-29
相关资源
最近更新 更多