【问题标题】:Debugging a pyQT4 app?调试 pyQT4 应用程序?
【发布时间】:2010-12-16 16:48:04
【问题描述】:

我有一个用 pyqt4 构建的相当简单的应用程序。我想调试连接到我的应用程序中的一个按钮的功能之一。但是,当我执行以下操作时

python -m pdb app.pyw
> break app.pyw:55  # This is where the signal handling function starts.

事情并不像我希望的那样工作。调试器没有中断我设置断点的函数并让我单步执行,而是进入了一个无限循环,打印出QCoreApplication::exec: The event loop is already running,我无法输入任何内容。有没有更好的方法来做到这一点?

【问题讨论】:

  • 只是想知道,第 55 行是什么?你在哪里注册信号还是处理它的函数?
  • 在这种情况下,就是处理信号的函数。
  • 我认为这不是一个完整的答案,但您可以尝试将 ERIC 作为 Python 和 PyQt 的 GUI 调试器:eric-ide.python-projects.org

标签: python qt pyqt4


【解决方案1】:

您需要致电QtCore.pyqtRemoveInputHook。我将它包装在我自己的set_trace 版本中:

def debug_trace():
  '''Set a tracepoint in the Python debugger that works with Qt'''
  from PyQt4.QtCore import pyqtRemoveInputHook

  # Or for Qt5
  #from PyQt5.QtCore import pyqtRemoveInputHook

  from pdb import set_trace
  pyqtRemoveInputHook()
  set_trace()

当你完成调试后,你可以调用QtCore.pyqtRestoreInputHook(),最好是在你还在 pdb 中时,然后在你按下回车键后,控制台垃圾邮件正在发生,继续按下“c”(继续)直到该应用程序正常恢复。 (由于某种原因,我不得不多次点击'c',它一直回到pdb,但在点击它几次后它恢复正常)

更多信息谷歌“pyqtRemoveInputHook pdb”。 (真的很明显不是吗?;P)

【讨论】:

  • 有用的答案,仅供参考,我发现这适用于 PyQt4,但不适用于 PySide。
【解决方案2】:

我必须先在跟踪点使用“下一个”命令才能脱离该功能。为此,我对 mgrandi 的代码进行了修改:

def pyqt_set_trace():
    '''Set a tracepoint in the Python debugger that works with Qt'''
    from PyQt4.QtCore import pyqtRemoveInputHook
    import pdb
    import sys
    pyqtRemoveInputHook()
    # set up the debugger
    debugger = pdb.Pdb()
    debugger.reset()
    # custom next to get outside of function scope
    debugger.do_next(None) # run the next command
    users_frame = sys._getframe().f_back # frame where the user invoked `pyqt_set_trace()`
    debugger.interaction(users_frame, None)

这对我有用。我从这里找到了解决方案:Python (pdb) - Queueing up commands to execute

【讨论】:

    【解决方案3】:

    在我的测试中,jamk 的解决方案有效,而前一个虽然更简单,但无效。

    在某些情况下,由于我不清楚的原因,我能够在不执行任何操作的情况下调试 Qt。

    【讨论】:

      猜你喜欢
      • 2015-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-16
      • 2011-01-26
      • 2012-12-10
      相关资源
      最近更新 更多