OSX-Qt应用程序在接收系统事件QEvent::FileOpen时崩溃



我使用plist文件来允许我的Qt应用程序能够直接从查找器打开文件。不幸的是,有时和某些系统(如下所述)上的应用程序会崩溃/冻结。

这个问题只发生在一些客户端计算机上,并且只有当我在使用10.6.8 OSX的生产计算机上编译应用程序时才会出现。当我在10.9.1 OSX上编译它时,一切都很好。

我尝试了几次更改,并在应用程序中注释了很多代码,但当整个QApplication::event()方法被注释时,应用程序也会崩溃。在我看来,这是10.8.6 OSX/3.2.6 Xcode中的一些错误。不幸的是,由于一些向后兼容性问题,我现在无法将其更新到新版本。

我使用的是git的最新Qt4.8.6,官方4.8.2版本也有同样的行为。

是否有任何已知的解决方法或如何查找/修复此错误的建议?这非常困难,因为无论是否处理该事件,都无法从调试器测试该事件,并且使用QMessageBox的跟踪也会崩溃。此外,崩溃调用堆栈不会显示任何有用的内容(如下所示)。

我的应用程序plist文件具有以下格式:

<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>         <string>ORM Designer project file</string>
<key>CFBundleTypeRole</key>         <string>Editor</string>
<key>CFBundleTypeIconFile</key>     <string>@ICON@</string>
<key>LSHandlerRank</key>            <string>Owner</string>
<key>LSIsAppleDefaultForType</key>  <true/>
<key>CFBundleTypeExtensions</key>   
<array>
<string>ormdesigner</string>
<string>ormdes</string>
<string>ormdesigner2</string>
<string>ormdes2</string>
</array>
</dict>
</array>

谷歌CrashPad捕获的调用堆栈:

崩溃原因:EXC_BAD_ACCESS/0x000000d崩溃地址:0x0

Thread 0 (crashed)
0  QtCore + 0x7cd6a
rbx = 0x00000000ffffffff   r12 = 0x6163696c7070412f
r13 = 0x00007fff5fbfbe30   r14 = 0x00007fff5fbfbfb0
r15 = 0x0000000000007fff   rip = 0x00000001054bed6a
rsp = 0x00007fff5fbfbe00   rbp = 0x00007fff5fbfbe20
Found by: given as instruction pointer in context
1  QtCore + 0x13f2cb
rip = 0x00000001055812cc   rsp = 0x00007fff5fbfbe30
rbp = 0x00007fff5fbfbe70
Found by: stack scanning
2  QtGui + 0x38b4e
rip = 0x00000001057b6b4f   rsp = 0x00007fff5fbfbe80
rbp = 0x00007fff5fbfc000
Found by: stack scanning
3  libobjc.A.dylib + 0x78e1
rip = 0x00007fff8cce48e2   rsp = 0x00007fff5fbfbee0
rbp = 0x00007fff5fbfc000
Found by: stack scanning
4  libobjc.A.dylib + 0x121db
rip = 0x00007fff8ccef1dc   rsp = 0x00007fff5fbfbf50
rbp = 0x00007fff5fbfc000
Found by: stack scanning
5  CoreFoundation + 0x1a9eef
rip = 0x00007fff8752aef0   rsp = 0x00007fff5fbfbf68
rbp = 0x00007fff5fbfc000
Found by: stack scanning

完整的调用堆栈被发布到pastebin。

谢谢你的建议Ludek

我们决定重新安装两台构建机器,一台安装到Mac OSX 10.6.8,一台重新安装到OSX 10.7.5。

我们在两台机器上安装了完全相同的软件,唯一的区别是Xcode。10.6.8是最新的3.2.6,10.7.5是4.6.3。

当我们在这两台机器上构建应用程序时,在10.7版本创建的应用程序运行得非常完美,没有任何崩溃。应用程序建立在10.6之上。再次崩溃。因此,从我们所尝试的(我们在这个bug上花了大约30个小时)来看,我几乎可以肯定问题出在Xcode编译器内部。

如果有人有类似的问题,解决这个问题最简单、耗时更少的方法是将他的构建机器更新到新版本。

最新更新