PDA

View Full Version : Crash on QApplication::exec()



Nivek
4th April 2011, 21:18
Hi there, I'm trying to port an application from CentOS to Mac OSX. I got the code to compile, but a segmentation fault occurs on QApplication::exec() when it is run, giving the error:



2011-04-04 14:26:41.907 vmfdebuger[1979:903] -[NSCFArray name]: unrecognized selector sent to instance 0x102d9d3f0
Qt has caught an exception thrown from an event handler. Throwing
exceptions from an event handler is not supported in Qt. You must
reimplement QApplication::notify() and catch all exceptions there.


This did not happen on CentOs. Any hints on what I might have missed?

Here is the main method. Everything works ok until it gets to app.exec().



#include <QApplication>
#include <iostream>
#include <fstream>
#include <QTime>
#include "qdebugstream.h"
#include "vmfdebuger.h"
#include "configmanager.h"
#include "ConsoleLog.h"

#include "loadsaveddata.h"

using namespace std;


int main(int argc, char *argv[])
{
QApplication app(argc, argv);

QString fileName;

if (argc > 1)
fileName = QString(argv[1]);

VMFDebuger mainWin(0, argc, argv );

// redirect cerr and cout to console window
QTextEdit* console = mainWin.getConsoleWindow();
QDebugStream qout(std::cout, console);
QDebugStream qerr(std::cerr, console);

ConsoleLog::setConsoleWidget(mainWin.getConsoleWin dow());
ConsoleLog::dumpBufferToConsoleWindow();

ConsoleLog::getInstance(mainWin.getConsoleWindow() );


//for file logging:
ofstream logfile;
logfile.open("C:/logfile.txt", ios::app);
logfile << QTime::currentTime().toString().toAscii().data() << "Start Logging...... \n";
logfile.flush();

mainWin.show();

return app.exec();
}

Here is the error report from the os:



Code Type: X86-64 (Native)
Parent Process: Qt Creator [93099]

Date/Time: 2011-04-04 15:08:18.732 -0400
OS Version: Mac OS X Server 10.6.7 (10J869)
Report Version: 6

Interval Since Last Report: 111952 sec
Crashes Since Last Report: 24
Per-App Crashes Since Last Report: 24
Anonymous UUID: 704E20B4-A73C-44F5-807E-3A063AA83650

Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Crashed Thread: 0 Dispatch queue: com.apple.main-thread

Application Specific Information:
abort() called

Thread 0 Crashed: Dispatch queue: com.apple.main-thread
0 libSystem.B.dylib 0x00007fff82f3e5d6 __kill + 10
1 libSystem.B.dylib 0x00007fff82fdecd6 abort + 83
2 libSystem.B.dylib 0x00007fff82f5ec52 _Unwind_Resume + 66
3 vmfdebuger 0x00000001000306c6 main + 831 (main.cpp:56)
4 vmfdebuger 0x0000000100005136 _start + 224
5 vmfdebuger 0x0000000100005055 start + 33

Thread 1: Dispatch queue: com.apple.libdispatch-manager
0 libSystem.B.dylib 0x00007fff82f0912a kevent + 10
1 libSystem.B.dylib 0x00007fff82f0affd _dispatch_mgr_invoke + 154
2 libSystem.B.dylib 0x00007fff82f0acd4 _dispatch_queue_invoke + 185
3 libSystem.B.dylib 0x00007fff82f0a7fe _dispatch_worker_thread2 + 252
4 libSystem.B.dylib 0x00007fff82f0a128 _pthread_wqthread + 353
5 libSystem.B.dylib 0x00007fff82f09fc5 start_wqthread + 13

Thread 2:
0 libSystem.B.dylib 0x00007fff82f09f4a __workq_kernreturn + 10
1 libSystem.B.dylib 0x00007fff82f0a35c _pthread_wqthread + 917
2 libSystem.B.dylib 0x00007fff82f09fc5 start_wqthread + 13

Thread 0 crashed with X86 Thread State (64-bit):
rax: 0x0000000000000000 rbx: 0x0000000102da96c0 rcx: 0x00007fff5fbfeff8 rdx: 0x0000000000000000
rdi: 0x0000000000000b95 rsi: 0x0000000000000006 rbp: 0x00007fff5fbff010 rsp: 0x00007fff5fbfeff8
r8: 0x0000000000005034 r9: 0x000000000000000b r10: 0x00007fff82f3a616 r11: 0xffffff80002e28b0
r12: 0x00007fff5fbff020 r13: 0x00007fff5fbffb08 r14: 0x0000000000000001 r15: 0x0000000000000000
rip: 0x00007fff82f3e5d6 rfl: 0x0000000000000206 cr2: 0x0000000102969f40


Thanks in advance for any help.

wysota
4th April 2011, 21:47
What does vmfdebuger do? It seems to be the source of the crash.

Nivek
4th April 2011, 22:04
vmfdebuger is the main application window. It's very long so I can't post it all here... but its constructor does connect a lot of signals and slots, and I read that exceptions in slots can cause this crash. This never happened before though, it ran fine on Linux with no exceptions in the slots. Are there any common pieces of code that need to be changed to run on the mac?

wysota
4th April 2011, 22:10
Are you throwing any exceptions yourself anywhere?

Nivek
4th April 2011, 22:11
No, I am not.

wysota
4th April 2011, 22:27
What is in line #56 of your main.cpp?

Nivek
4th April 2011, 22:46
Ah, the line numbers don't match up exactly as I removed some commented out lines from my post. Line 56 refers to the closing brace of the method, line 46 in the code I posted above.

wysota
4th April 2011, 22:51
In that case the crash occurs when destructors are called (most probably the destructor of your vmfdebuger class). Could you post a full debugger backtrace with the binary built in debug mode?

Nivek
4th April 2011, 23:39
Here is the application output for debug mode. Apparently QT wasn't installed correctly, but I don't know how it even compiles if it can't find QtCore, etc? I have no idea where that world clock stuff is coming from. Sorry for my ignorance, but how do I do a proper back trace?




Unable to read symbols for QtSql.framework/Versions/4/QtSql (file not found).
Unable to read symbols from "QtSql" (not yet mapped into memory).
Unable to read symbols for QtXml.framework/Versions/4/QtXml (file not found).
Unable to read symbols from "QtXml" (not yet mapped into memory).
Unable to read symbols for QtGui.framework/Versions/4/QtGui (file not found).
Unable to read symbols from "QtGui" (not yet mapped into memory).
Unable to read symbols for QtNetwork.framework/Versions/4/QtNetwork (file not found).
Unable to read symbols from "QtNetwork" (not yet mapped into memory).
Unable to read symbols for QtCore.framework/Versions/4/QtCore (file not found).
Unable to read symbols from "QtCore" (not yet mapped into memory).
Could not find object file "/private/tmp/qt-stuff-6474/source/qt-everywhere-opensource-src-4.7.0/examples/designer/customwidgetplugin/.obj/debug-shared/analogclock.o" - no debug information available for "analogclock.cpp".
Could not find object file "/private/tmp/qt-stuff-6474/source/qt-everywhere-opensource-src-4.7.0/examples/designer/customwidgetplugin/.obj/debug-shared/customwidgetplugin.o" - no debug information available for "customwidgetplugin.cpp".
Could not find object file "/private/tmp/qt-stuff-6474/source/qt-everywhere-opensource-src-4.7.0/examples/designer/customwidgetplugin/.obj/debug-shared/moc_analogclock.o" - no debug information available for ".moc/debug-shared/moc_analogclock.cpp".
Could not find object file "/private/tmp/qt-stuff-6474/source/qt-everywhere-opensource-src-4.7.0/examples/designer/customwidgetplugin/.obj/debug-shared/moc_customwidgetplugin.o" - no debug information available for ".moc/debug-shared/moc_customwidgetplugin.cpp".
Could not find object file "/private/tmp/qt-stuff-6474/source/qt-everywhere-opensource-src-4.7.0/examples/designer/worldtimeclockplugin/.obj/debug-shared/worldtimeclock.o" - no debug information available for "worldtimeclock.cpp".
Could not find object file "/private/tmp/qt-stuff-6474/source/qt-everywhere-opensource-src-4.7.0/examples/designer/worldtimeclockplugin/.obj/debug-shared/worldtimeclockplugin.o" - no debug information available for "worldtimeclockplugin.cpp".
Could not find object file "/private/tmp/qt-stuff-6474/source/qt-everywhere-opensource-src-4.7.0/examples/designer/worldtimeclockplugin/.obj/debug-shared/moc_worldtimeclock.o" - no debug information available for ".moc/debug-shared/moc_worldtimeclock.cpp".
Could not find object file "/private/tmp/qt-stuff-6474/source/qt-everywhere-opensource-src-4.7.0/examples/designer/worldtimeclockplugin/.obj/debug-shared/moc_worldtimeclockplugin.o" - no debug information available for ".moc/debug-shared/moc_worldtimeclockplugin.cpp".
2011-04-04 17:05:25.579 vmfdebuger[6072:a0f] -[NSCFArray name]: unrecognized selector sent to instance 0x102ea6650
Qt has caught an exception thrown from an event handler. Throwing
exceptions from an event handler is not supported in Qt. You must
reimplement QApplication::notify() and catch all exceptions there.

wysota
5th April 2011, 00:53
It seems you have no debugging symbols for the libraries installed.

Nivek
6th April 2011, 21:07
Hi sorry about the delay but I've finally been able to get back to this. I have the QtCore, QtGui, etc frameworks installed in /Library/Frameworks/. How to I get the symbols to load properly?

wysota
6th April 2011, 22:09
Do you have the debugging symbols for those libraries? Did you build Qt in both release and debug mode?

Nivek
6th April 2011, 22:40
Yes, I built Qt as frameworks, and the debug symbols are contained in the frameworks. I can't seem to change where it is looking for them from for example QtGui.framework/Versions/4/QtGui, where it is trying to find them, to /Library/Frameworks/QtGui.framework/Versions/4/QtGui where they are located.

wysota
6th April 2011, 23:18
Yes, I built Qt as frameworks, and the debug symbols are contained in the frameworks.
Apparently not if the debugger can't find them.