我有一个用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,而我无法输入任何东西。有没有更好的方法来做这件事?
发布于 2009-11-17 09:03:07
你需要给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中的时候可能是最好的,然后在你点击enter之后,当控制台垃圾邮件发生时,继续按'c‘(表示继续),直到应用程序正常恢复。(由于某种原因,我不得不多次按下'c‘,它一直回到pdb,但在按了几次之后,它又恢复正常了)
有关更多信息,请谷歌"pyqtRemoveInputHook pdb“。(很明显,不是吗?;P)
发布于 2014-03-19 00:32:07
我必须在跟踪点使用"next“命令才能首先退出该函数。为此,我对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
发布于 2020-03-27 04:56:31
在我的测试中,jamk的解决方案有效,而前面的解决方案虽然更简单,但不起作用。
在某些情况下,由于我不清楚的原因,我可以在不执行任何这些操作的情况下调试Qt。
https://stackoverflow.com/questions/1736015
复制相似问题