Our reporting tool occasional crashed on MacOs when was executed with several command line params. Command looked like this:
/app-path/OrmDesigner2 -crash-report -dump-directory /var/folders/4z/k1r35jnn4v77mzl7hzf8wvvw0000gn/T/OrmDesigner2/CrashReports
When inspecting exception report, we found following stack trace:
Thread 0 Crashed: Dispatch queue: com.apple.main-thread 0 QtCore 0x0000000100d671da QString::fromLocal8Bit(char const*, int) + 42 1 QtCore 0x0000000100e72dac QCoreApplication::arguments() + 124 2 QtGui 0x00000001000de8ef -[QCocoaApplicationDelegate application:openFiles:] + 223 3 com.apple.AppKit 0x00007fff805f3b52 -[NSApplication(NSAppleEventHandling) _handleAEOpenDocumentsForURLs:] + 505 4 com.apple.AppKit 0x00007fff804c0065 -[NSApplication(NSAppleEventHandling) _handleCoreEvent:withReplyEvent:] + 217 5 com.apple.Foundation 0x00007fff800f90d6 -[NSAppleEventManager dispatchRawAppleEvent:withRawReply:handlerRefCon:] + 360 6 com.apple.Foundation 0x00007fff800f8f06 _NSAppleEventManagerGenericHandler + 114 7 com.apple.AE 0x00007fff82b1c32b aeDispatchAppleEvent(AEDesc const*, AEDesc*, unsigned int, unsigned char*) + 162 8 com.apple.AE 0x00007fff82b1c224 dispatchEventAndSendReply(AEDesc const*, AEDesc*) + 32 9 com.apple.AE 0x00007fff82b1c12b aeProcessAppleEvent + 210 10 com.apple.HIToolbox 0x00007fff875ed619 AEProcessAppleEvent + 48 11 com.apple.AppKit 0x00007fff803c5095 _DPSNextEvent + 1191 12 com.apple.AppKit 0x00007fff803c4801 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 155 13 com.apple.AppKit 0x00007fff8038a68f -[NSApplication run] + 395 14 QtGui 0x00000001000e7c04 QEventDispatcherMac::processEvents(QFlags) + 1588 15 QtCore 0x0000000100e70774 QEventLoop::processEvents(QFlags) + 68 16 QtCore 0x0000000100e70a94 QEventLoop::exec(QFlags) + 180 17 QtCore 0x0000000100e720bc QCoreApplication::exec() + 188 18 com.inventic.ormdesigner 0x0000000100003447 main + 46 (main.cpp:31) 19 com.inventic.ormdesigner 0x00000001000032e0 start + 52
After some google-searching I found out that the problem is in core of our application. When subclassing Qt QApplication, it’s necessary to pass argc with reference, not by value. So after adding one little &, everything works like charm!
//construct application object CApplication(int& argc, char **argv);