我正在开发一个国际象棋程序,其中GUI通过UCI protocol与引擎进行通信,目前正在使用OSX和PyCharm。我正在使用QProcess进行通信。
我的应用程序崩溃,但我无法确定地重现那些崩溃。 Python输出只是给出了
Process finished with exit code 134
关于OSX的崩溃报告提供了这份详细的报告,但说实话,我完全迷失了如何进一步。我怀疑线程有些问题,但是如何调试?
Process: Python [527]
Path: /usr/local/Cellar/python3/3.4.1/Frameworks/Python.framework/Versions/3.4/Resources/Python.app/Contents/MacOS/Python
Identifier: org.python.python
Version: 3.4.1 (3.4.1)
Code Type: X86-64 (Native)
Parent Process: pycharm [360]
Responsible: pycharm [360]
User ID: 501
Date/Time: 2015-02-16 10:40:09.497 +0100
OS Version: Mac OS X 10.9.5 (13F34)
Report Version: 11
Anonymous UUID: XXXXXX
Crashed Thread: 4 Uci_engine
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Application Specific Information:
abort() called
*** error for object 0x7fb104975000: pointer being realloc'd was not allocated
Thread 0:: Dispatch queue: com.apple.main-thread
0 QtCore 0x0000000109475d2e QByteArray::resize(int) + 6
1 QtCore 0x00000001094ec5e9 QRingBuffer::clear() + 123
2 QtCore 0x00000001094f58ab QProcess::readData(char*, long long) + 257
3 QtCore.so 0x000000010a081784 sipQProcess::readData(char*, long long) + 106
4 QtCore 0x00000001094f0648 QIODevice::read(char*, long long) + 828
5 QtCore 0x00000001094f0a92 QIODevice::readAll() + 398
6 QtCore 0x00000001094f59a6 QProcess::readAllStandardOutput() + 48
7 QtCore.so 0x000000010a082b78 meth_QProcess_readAllStandardOutput(_object*, _object*) + 120
8 org.python.python 0x0000000107cbad5c PyEval_EvalFrameEx + 19156
9 org.python.python 0x0000000107cb60d4 PyEval_EvalCodeEx + 1628
10 org.python.python 0x0000000107c490b8 function_call + 360
11 org.python.python 0x0000000107c2be11 PyObject_Call + 103
12 org.python.python 0x0000000107c3a8a4 method_call + 136
13 org.python.python 0x0000000107c2be11 PyObject_Call + 103
14 org.python.python 0x0000000107cbdb30 PyEval_CallObjectWithKeywords + 93
15 sip.so 0x00000001097bfd68 sip_api_invoke_slot_ex + 435
16 QtCore.so 0x000000010a0f5cb0 PyQtProxy::invokeSlot(qpycore_slot const&, void**, int) + 162
17 QtCore.so 0x000000010a0f5b7c PyQtProxy::unislot(void**) + 184
18 QtCore.so 0x000000010a0f5ab3 PyQtProxy::qt_metacall(QMetaObject::Call, int, void**) + 111
19 QtCore 0x000000010956222d QObject::event(QEvent*) + 637
20 QtGui 0x0000000108985ed5 QApplicationPrivate::notify_helper(QObject*, QEvent*) + 195
21 QtGui 0x0000000108987419 QApplication::notify(QObject*, QEvent*) + 889
22 QtGui.so 0x000000010811a29a sipQApplication::notify(QObject*, QEvent*) + 122
23 QtCore 0x0000000109551bb8 QCoreApplication::notifyInternal(QObject*, QEvent*) + 118
24 QtCore 0x000000010955259c QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) + 716
25 com.apple.CoreFoundation 0x00007fff904985b1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
26 com.apple.CoreFoundation 0x00007fff90489c62 __CFRunLoopDoSources0 + 242
27 com.apple.CoreFoundation 0x00007fff904893ef __CFRunLoopRun + 831
28 com.apple.CoreFoundation 0x00007fff90488e75 CFRunLoopRunSpecific + 309
29 com.apple.HIToolbox 0x00007fff87427a0d RunCurrentEventLoopInMode + 226
30 com.apple.HIToolbox 0x00007fff87427685 ReceiveNextEventCommon + 173
31 com.apple.HIToolbox 0x00007fff874275bc _BlockUntilNextEventMatchingListInModeWithFilter + 65
32 com.apple.AppKit 0x00007fff87e5724e _DPSNextEvent + 1434
33 com.apple.AppKit 0x00007fff87e5689b -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 122
34 com.apple.AppKit 0x00007fff87e4a99c -[NSApplication run] + 553
35 QtGui 0x0000000108943936 QEventDispatcherMac::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) + 540
36 QtCore 0x000000010954f215 QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) + 77
37 QtCore 0x000000010954f386 QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) + 356
38 QtCore 0x0000000109552009 QCoreApplication::exec() + 199
39 QtGui.so 0x000000010811b4eb meth_QApplication_exec_(_object*, _object*) + 80
40 org.python.python 0x0000000107cbad5c PyEval_EvalFrameEx + 19156
41 org.python.python 0x0000000107cb60d4 PyEval_EvalCodeEx + 1628
42 org.python.python 0x0000000107cb5a72 PyEval_EvalCode + 63
43 org.python.python 0x0000000107cd9b28 run_mod + 58
44 org.python.python 0x0000000107cd9dc7 PyRun_FileExFlags + 178
45 org.python.python 0x0000000107cd95e7 PyRun_SimpleFileExFlags + 909
46 org.python.python 0x0000000107cec4f7 Py_Main + 3095
47 org.python.python 0x0000000107c19e27 0x107c18000 + 7719
48 libdyld.dylib 0x00007fff87a165fd start + 1
Thread 1:: Dispatch queue: com.apple.libdispatch-manager
0 libsystem_kernel.dylib 0x00007fff8e18f662 kevent64 + 10
1 libdispatch.dylib 0x00007fff86c6f421 _dispatch_mgr_invoke + 239
2 libdispatch.dylib 0x00007fff86c6f136 _dispatch_mgr_thread + 52
Thread 2:
0 libsystem_kernel.dylib 0x00007fff8e18aa1a mach_msg_trap + 10
1 libsystem_kernel.dylib 0x00007fff8e189d18 mach_msg + 64
2 com.apple.CoreFoundation 0x00007fff90489f15 __CFRunLoopServiceMachPort + 181
3 com.apple.CoreFoundation 0x00007fff90489539 __CFRunLoopRun + 1161
4 com.apple.CoreFoundation 0x00007fff90488e75 CFRunLoopRunSpecific + 309
5 com.apple.AppKit 0x00007fff87ff705e _NSEventThread + 144
6 libsystem_pthread.dylib 0x00007fff8c7a2899 _pthread_body + 138
7 libsystem_pthread.dylib 0x00007fff8c7a272a _pthread_start + 137
8 libsystem_pthread.dylib 0x00007fff8c7a6fc9 thread_start + 13
Thread 3:: QProcessManager
0 libsystem_kernel.dylib 0x00007fff8e18e9aa __select + 10
1 QtCore 0x000000010952cf86 QProcessManager::run() + 132
2 QtCore 0x00000001094735ba QThreadPrivate::start(void*) + 386
3 libsystem_pthread.dylib 0x00007fff8c7a2899 _pthread_body + 138
4 libsystem_pthread.dylib 0x00007fff8c7a272a _pthread_start + 137
5 libsystem_pthread.dylib 0x00007fff8c7a6fc9 thread_start + 13
Thread 4 Crashed:: Uci_engine
0 libsystem_kernel.dylib 0x00007fff8e18e866 __pthread_kill + 10
1 libsystem_pthread.dylib 0x00007fff8c7a335c pthread_kill + 92
2 libsystem_c.dylib 0x00007fff91b34b1a abort + 125
3 libsystem_malloc.dylib 0x00007fff876b5451 realloc + 364
4 QtCore 0x00000001094762dd QByteArray::realloc(int) + 161
5 QtCore 0x0000000109475d88 QByteArray::resize(int) + 96
6 QtCore 0x00000001094ec6c1 QRingBuffer::reserve(int) + 157
7 QtCore 0x00000001094f41ec QProcessPrivate::_q_canReadStandardOutput() + 76
8 QtCore 0x00000001094f65ce QProcess::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) + 364
9 QtCore 0x0000000109565d71 QMetaObject::activate(QObject*, QMetaObject const*, int, void**) + 2037
10 QtCore 0x00000001095a7b68 QSocketNotifier::activated(int) + 60
11 QtCore 0x000000010956a421 QSocketNotifier::event(QEvent*) + 383
12 QtGui 0x0000000108985ed5 QApplicationPrivate::notify_helper(QObject*, QEvent*) + 195
13 QtGui 0x0000000108987419 QApplication::notify(QObject*, QEvent*) + 889
14 QtGui.so 0x000000010811a29a sipQApplication::notify(QObject*, QEvent*) + 122
15 QtCore 0x0000000109551bb8 QCoreApplication::notifyInternal(QObject*, QEvent*) + 118
16 QtCore 0x0000000109579db7 QEventDispatcherUNIX::activateSocketNotifiers() + 203
17 QtCore 0x0000000109579b8e QEventDispatcherUNIXPrivate::doSelect(QFlags<QEventLoop::ProcessEventsFlag>, timeval*) + 1426
18 QtCore 0x000000010957ae39 QEventDispatcherUNIX::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) + 341
19 QtCore 0x000000010954f215 QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) + 77
20 QtCore 0x000000010954f386 QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) + 356
21 QtCore 0x0000000109471ca5 QThread::exec() + 217
22 QtCore.so 0x000000010a0c28f3 meth_QThread_exec_(_object*, _object*) + 99
23 org.python.python 0x0000000107cbad5c PyEval_EvalFrameEx + 19156
24 org.python.python 0x0000000107cb60d4 PyEval_EvalCodeEx + 1628
25 org.python.python 0x0000000107c490b8 function_call + 360
26 org.python.python 0x0000000107c2be11 PyObject_Call + 103
27 org.python.python 0x0000000107c3a8a4 method_call + 136
28 org.python.python 0x0000000107c2be11 PyObject_Call + 103
29 org.python.python 0x0000000107cbdb30 PyEval_CallObjectWithKeywords + 93
30 sip.so 0x00000001097b6559 sip_api_call_method + 214
31 QtCore.so 0x000000010a002174 sipVH_QtCore_11(PyGILState_STATE, void (*)(_sipSimpleWrapper*, PyGILState_STATE), _sipSimpleWrapper*, _object*) + 47
32 QtCore.so 0x000000010a0c24fb sipQThread::run() + 79
33 QtCore 0x00000001094735ba QThreadPrivate::start(void*) + 386
34 libsystem_pthread.dylib 0x00007fff8c7a2899 _pthread_body + 138
35 libsystem_pthread.dylib 0x00007fff8c7a272a _pthread_start + 137
36 libsystem_pthread.dylib 0x00007fff8c7a6fc9 thread_start + 13
Thread 5:
0 libsystem_kernel.dylib 0x00007fff8e18ee6a __workq_kernreturn + 10
1 libsystem_pthread.dylib 0x00007fff8c7a3f08 _pthread_wqthread + 330
2 libsystem_pthread.dylib 0x00007fff8c7a6fb9 start_wqthread + 13
Thread 4 crashed with X86 Thread State (64-bit):
rax: 0x0000000000000000 rbx: 0x000000010a84d000 rcx: 0x000000010a84bd98 rdx: 0x0000000000000000
rdi: 0x0000000000002f1f rsi: 0x0000000000000006 rbp: 0x000000010a84bdc0 rsp: 0x000000010a84bd98
r8: 0x00000000fffffff8 r9: 0x0000000000000000 r10: 0x0000000008000000 r11: 0x0000000000000206
r12: 0x00007fb104975000 r13: 0x0000000000000004 r14: 0x0000000000000006 r15: 0x0000000107c1e000
rip: 0x00007fff8e18e866 rfl: 0x0000000000000206 cr2: 0x00007fff784a0408
Logical CPU: 0
Error Code: 0x02000148
Trap Number: 133
答案 0 :(得分:1)
看起来这个帖子崩溃了。
Thread 4 Crashed:: Uci_engine
0 libsystem_kernel.dylib 0x00007fff8e18e866 __pthread_kill + 10
1 libsystem_pthread.dylib 0x00007fff8c7a335c pthread_kill + 92
2 libsystem_c.dylib 0x00007fff91b34b1a abort + 125
3 libsystem_malloc.dylib 0x00007fff876b5451 realloc + 364
4 QtCore 0x00000001094762dd QByteArray::realloc(int) + 161
此线程崩溃导致整个程序崩溃并退出。
从堆栈中看,内存访问看起来异常,通常这种调试很难用于python,对于PyQt来说,它更复杂。它需要你知道很多cpython和它的实现,除了你应该知道Qt和Sip的实现,因为Cpython有GC,所以它更复杂。在我看来,如果可以重现,那么尝试添加更多日志以找出导致此问题的代码行。如果偶尔发生这种情况并且通常在Qt退出时间,那么你应该优雅地设置继承树。此外,您使用的是哪个版本的pycharm?最新的PyCharm 4. *将在调试期间自动挂钩python可执行程序,我发现有时它会在复杂的PyQt项目的调试时间内崩溃但是如果只是在没有调试的情况下运行就好了,如果这只发生在&#34; debug& #34;程序,您可以尝试切换到早期的pycharm或只是禁用此自动挂钩功能。