2014-12-31 3 views
2

Python 라이브러리에 Python으로 Qt 애플리케이션을 작성했습니다.이파이썬 : 분할 오류 (코어 덤프)

(gdb) backtrace 
#0 0x00007ffff5d19c40 in QObject::staticMetaObject() from /usr/lib/x86_64-linux-gnu/libQtCore.so.4 
#1 0x00007ffff64c4bce in PySide::SignalManager::clear()() from /usr/lib/x86_64-linux-gnu/libpyside-python2.7.so.1.2 
#2 0x00007ffff64d1f95 in PySide::destroyQCoreApplication()() from /usr/lib/x86_64-linux-gnu/libpyside-python2.7.so.1.2 
#3 0x00007ffff64d2981 in PySide::runCleanupFunctions()() from /usr/lib/x86_64-linux-gnu/libpyside-python2.7.so.1.2 
#4 0x00007ffff683ecc5 in ??() from /usr/lib/python2.7/dist-packages/PySide/QtCore.so 
#5 0x000000000052f936 in PyEval_EvalFrameEx() 
#6 0x000000000056d0aa in ??() 
#7 0x00000000004da29f in PyEval_CallObjectWithKeywords() 
#8 0x000000000042fa19 in Py_Finalize() 
#9 0x000000000042fb7c in Py_Exit() 
#10 0x000000000042fcb9 in ??() 
#11 0x000000000042ec32 in PyErr_PrintEx() 
#12 0x000000000042f042 in ??() 
#13 0x000000000046aa09 in Py_Main() 
#14 0x00007ffff7817ec5 in __libc_start_main (main=0x46ac3f <main>, argc=2, argv=0x7fffffffdf58, init=<optimized out>, fini=<optimized out>, 
    rtld_fini=<optimized out>, stack_end=0x7fffffffdf48) at libc-start.c:287 
#15 0x000000000057497e in _start() 

버전 :

QMake version 3.0 
Using Qt version 5.2.1 in /usr/lib/x86_64-linux-gnu 
Python 2.7.6 
Ubuntu 14.04 

내가이 문제를 해결하려면 어떻게 내가 그것을 닫을 때 나는 분할 오류 (덤프 코어)

역 추적하여 gdb를 얻을?

+0

Qt에서는 허용되지 않는 작업을 수행했습니다. 코드를 보여주세요! – Daniel

+0

@Daniel 내 코드를 표시 할 수 없습니다. gdb 또는 다른 도구를 사용하여 잘못된 행을 얻을 수있는 방법이 있습니까? – Patrick

+1

오류가 사라질 때까지 코드를 단순화하십시오. – Daniel

답변

0

이 질문이 아직 최신 인 경우, 나는 동일한 문제가 있었고 오늘 해결했습니다. 내 경우에는 그것을 직접 내 위젯의

destroy() 

메소드를 호출하는 문제가 있었다. 일부 스레드를 열어 놓은 후 segfault가 실행되었습니다. 지금 당장은 close 이벤트를 내보내는 것이 더 좋습니다.

응용 프로그램을 닫기 전에 할 일이있는 경우 지금 또한 closeEvt() 메소드를 오버라이드 (override)가 확인 않았다

## 
# Closes the application 
# ... 
def closeEvent(self, event): 
    if self.canClose() # Exit the application 
     event.accept() 
     logging.debug("Closed App clean") 
    else: 
     # Do stuff to close the application cleanly 
     if canCloseNow: 
      event.accept() 
     else: 
      # Give user feedbackstuff like opening a save dialog 
      # or some other stuff... 
      event.ignore() 

내가 가장 가능성이 일을 훨씬 더 우아한 방법이 있다는 것을 알고있다 하지만 제게 그것은 꽤 잘 작동했습니다 ...