2014-01-06 5 views
1

Я использую файл plist, чтобы мое приложение Qt могло открывать файлы непосредственно у искателя. К сожалению, иногда и на некоторых системах (описанных ниже) приложение аварийно завершает/замораживает.OSX - приложение Qt разбилось при получении системного события QEvent :: FileOpen

Эта проблема возникает только на некоторых клиентских компьютерах и только при компиляции приложения на нашем производственном компьютере с 10.6.8 OSX. Когда я скомпилирую его на моем 10.9.1 OSX, все работает нормально.

Я пробовал несколько изменений и комментировал много кода в нашем приложении, но приложение также срабатывает, когда весь метод QApplication :: event() комментируется. Мне кажется, что это ошибка в 10.8.6 OSX/3.2.6 Xcode. К сожалению, сейчас я не могу обновить его до более новой версии из-за некоторых проблем с обратной совместимостью.

Я использую последний Qt 4.8.6 от git, и такое же поведение было на официальной версии 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>@[email protected]</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> 

CallStack захвачен ночлежка Google:

Крушение Причина: EXC_BAD_ACCESS/0x0000000d Краш Адрес: 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 

Полная CallStack является posted to pastebin.

Спасибо за любые советы Людеком

+0

Какая версия Qt? Отказоустойчивая обратная связь была бы полезна (попробуйте с 'export DYLD_IMAGE_SUFFIX = _debug'. Вероятно, что-то, что нужно сообщить в отладчике ошибок проекта Qt. –

+0

Первоначально я нашел эту ошибку в 4.8.2. Я также попробовал обновить Qt до последней версии 4.8.6 от git , но без различий. –

+0

Я забыл ответить на остальную часть вашего комментария. Предложение «export» не работает, потому что ошибка возникает только тогда, когда приложение выполняется из Finder, поэтому нет консоли для отладочного представления. И из того, что я выяснилось, что проблема решена в версии 10.7, поэтому, я полагаю, нет необходимости сообщать об этом. –

ответ

0

Мы решили переустановить два наших строительных машин, один для Mac OSX 10.6.8 и один в OSX 10.7.5.

Мы установили полностью тот же самый SW на обеих машинах с единственной разницей в Xcode. На 10.6.8 это был последний 3.2.6, а на 10.7.5 это было 4.6.3.

Когда мы создали наше приложение на обеих машинах, версия, созданная на 10.7, отлично работает без сбоев. Приложение построено на основе 10.6. снова падает. Поэтому из всего, что мы пробовали (мы потратили около 30 часов на эту ошибку), я почти уверен, что проблема заключается в компиляторе Xcode.

Если у кого-то есть аналогичная проблема, самый простой и менее трудоемкий способ решить эту проблему - обновить свою машину для сборки до более новой версии.

Смежные вопросы