首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调试pyQT4应用程序?

调试pyQT4应用程序?
EN

Stack Overflow用户
提问于 2009-11-15 07:46:58
回答 3查看 14.4K关注 0票数 44

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

代码语言:javascript
复制
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,而我无法输入任何东西。有没有更好的方法来做这件事?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-17 09:03:07

你需要给QtCore.pyqtRemoveInputHook打电话。我将它封装在我自己的set_trace版本中

代码语言:javascript
复制
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中的时候可能是最好的,然后在你点击enter之后,当控制台垃圾邮件发生时,继续按'c‘(表示继续),直到应用程序正常恢复。(由于某种原因,我不得不多次按下'c‘,它一直回到pdb,但在按了几次之后,它又恢复正常了)

有关更多信息,请谷歌"pyqtRemoveInputHook pdb“。(很明显,不是吗?;P)

票数 88
EN

Stack Overflow用户

发布于 2014-03-19 00:32:07

我必须在跟踪点使用"next“命令才能首先退出该函数。为此,我对mgrandi中的代码进行了修改:

代码语言:javascript
复制
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

票数 4
EN

Stack Overflow用户

发布于 2020-03-27 04:56:31

在我的测试中,jamk的解决方案有效,而前面的解决方案虽然更简单,但不起作用。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1736015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档