Python 调试pyQT4应用程序?
我有一个用pyqt4构建的相当简单的应用程序。我想调试一个连接到我应用程序中一个按钮的函数。然而,当我做以下事情时Python 调试pyQT4应用程序?,python,qt,pyqt4,Python,Qt,Pyqt4,我有一个用pyqt4构建的相当简单的应用程序。我想调试一个连接到我应用程序中一个按钮的函数。然而,当我做以下事情时 python -m pdb app.pyw > break app.pyw:55 # This is where the signal handling function starts. 事情不像我希望的那样顺利。调试器没有打断设置断点的函数并让我单步执行,而是进入一个无限循环,打印出QCoreApplication::exec:事件循环已经在运行,我无法输入任何内容。有
python -m pdb app.pyw
> break app.pyw:55 # This is where the signal handling function starts.
事情不像我希望的那样顺利。调试器没有打断设置断点的函数并让我单步执行,而是进入一个无限循环,打印出QCoreApplication::exec:事件循环已经在运行,我无法输入任何内容。有更好的方法吗?您需要打电话。我将其包装在自己版本的set\u 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.pyqtrerestoreinputhook()
,最好是在您仍在pdb中时,然后在按下enter键,并且控制台出现垃圾邮件后,继续按下“c”(继续),直到应用程序正常恢复。(由于某种原因,我不得不打了几次“c”,它一直回到pdb,但打了几次后,它恢复正常)
欲了解更多信息,请点击谷歌“pyqtRemoveInputHook pdb”。(真的很明显,不是吗?;P)我必须在跟踪点使用“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)
这对我有用。我从这里找到了解决方案:在我的测试中,jamk的解决方案是有效的,而前一个解决方案虽然简单,但不起作用
在某些情况下,由于我不清楚的原因,我能够在不做任何操作的情况下调试Qt。只想知道,第55行有什么内容?是在哪里注册信号还是处理信号的函数?在本例中,这就是处理信号的函数。我认为这不是一个完整的答案,但您可以尝试ERIC作为Python和PyQt的GUI调试器:有用的答案,仅供参考,我发现它与PyQt4一起工作,但与PySide不起作用。