py.user.nextВставил кучу принтов перед каждыми строчками. Установил, что сегфолтится постоянно в одном и том же месте:
Запусти программу в pdb. Можно и по-старинке: сделать вывод сообщений в консоль и запустить программу из консоли, чтобы понять, где происходит выпад.
return QtGui.QApplication.notify(self, receiver, event)
def notify(self, receiver, event): try: if self.eventLogFile and isinstance(event, QInputEvent): self.recordEvent(receiver, event) print '\nmain.py - 1-29_5' return QtGui.QApplication.notify(self, receiver, event) except Exception, e: if self.traceActive: self.logCurrentException() widget = self.activeModalWidget() if widget is None: widget = self.mainWindow QtGui.QMessageBox.critical( widget, u'Произошла ошибка', unicode(e), QtGui.QMessageBox.Close) return False except: return False
RodegastПрограмма по сути - форк программы из сайта samson-rus.com. Сам форк, увы, не распространяется свободно… А исходник включает более 2000 файлов плюс столько же .pyc. Не думаю, что кто-нибудь возьмется изучить…
А что за программа? Исходники предоставить можешь?
VadyПопробуй self убрать из списка аргументов.return QtGui.QApplication.notify(self, receiver, event)
RodegastВот значения print(receiver) и print(event) до 5 сегфолтов:
Покажи то место откуда вызывается notify. Посмотри какие значения у receiver и event.
<PyQt4.QtGui.QScrollBar object at 0xace758e4> ________ <PyQt4.QtGui.QScrollBar object at 0xaa97a7c4> <PyQt4.QtCore.QEvent object at 0xac7d9c8c> __________ <PyQt4.QtGui.QScrollBar object at 0xad401344> <PyQt4.QtCore.QEvent object at 0xac7cbbb4> __________ <PyQt4.QtGui.QPushButton object at 0xaab1d464> <PyQt4.QtCore.QEvent object at 0xaab76cd4> __________ <PyQt4.QtGui.QWidget object at 0xaab82584> <PyQt4.QtCore.QEvent object at 0xac8429bc>
def notify(self, receiver, event):Вывод в консоль терминала получился очень-очень длинным из-за двух строчек, содержащих print(dir()). При попытке скопировать вывод для последующего сохранения в отдельный файл для более удобного анализа, терминал аварийно завершил работу… Повторить сегфолт - опять целый день “рыбалки”…
try:
if self.eventLogFile and isinstance(event, QInputEvent):
self.recordEvent(receiver, event)
print ‘\nmain.py - 1-29_5’
print receiver
print(dir(receiver))
print event
print (dir(event))
return QtGui.QApplication.notify(self, receiver, event)
except Exception, e:
if self.traceActive:
self.logCurrentException()
widget = self.activeModalWidget()
if widget is None:
widget = self.mainWindow
QtGui.QMessageBox.critical( widget,
u'Произошла ошибка',
unicode(e),
QtGui.QMessageBox.Close)
return False
except:
return False
print ‘\nmain.py - 1-29_5’То есть уже на строчке print(dir(receiver)) произошел сегфолт…
print receiver
VadyВ каком классе этот метод notify() определён?
Опубликую часть кода программы:
py.user.nextЕсли убрать self из списка аргументов, то срабатывает exception:
Попробуй self убрать из списка аргументов.
Traceback (most recent call last):
File “program/main.py”, line 1166, in notify
self.logCurrentException()
File “program/main.py”, line 923, in logCurrentException
self.logException(*sys.exc_info())
File “program/main.py”, line 915, in logException
message = unicode(exceptionValue.message)
RuntimeError: maximum recursion depth exceeded while calling a Python object
VadyПеред этой строкой с return выведи type(self) в консоль.
Если убрать self из списка аргументов, то срабатывает exception: