我有一个类,该类是我其他非qt类的基础。此类使用Signal实例实例化QObject类。不幸的是,有时会引发分段错误错误。这是我的代码:
class PublisherSignal(QObject):
notify = Signal(list)
class PublisherBase:
def __init__(self, *args, **kwargs):
super(PublisherBase, self).__init__(*args, **kwargs)
self._signal = PublisherSignal()
故障处理程序表明,分段错误发生在PublisherSignal()
类实例化上。并非总是如此。在大多数情况下,它运行良好。不涉及线程。 PublisherBase
的子类不是QObject
的子类。
造成段错误的原因是什么?
答案 0 :(得分:4)
首先:Segmentation fault
对于开发人员来说是一个复杂的问题。要有效处理它,请使用fault handler。它是Python v.3.x的一部分,但是您可以使用 pip 将其安装在Python v.2.x中。但有时您最好使用事件过滤器注册-为一个小部件跟踪其信号事件。这是鼠标的示例(只是看它的外观):
# IT IS JUST AN EXAMPLE (NOT A SOLUTION)
def eventFilter(self, source, event):
if event.type() == QEvent.MouseButtonPress:
if source == self.txtEditor :
pos=event.pos()
cursor=self.txtEditor.cursorForPosition(pos)
cursor.select(QTextCursor.WordUnderCursor)
txtClicked=cursor.selectedText()
self.testCommand(str(txtClicked))
return QMainWindow.eventFilter(self, source, event)
第二:您可以使用The Python Debugger模块:
python -m pdb yourScript.py
第三:对于所涉及的线程(但是您说不涉及任何线程)。
shutdown (exit) can hang or segfault with daemon threads running