Seite 1 von 1

Exceptions

Verfasst: 1. Juni 2010 15:19
von Troll.Soft
Hallo,
bin fleißiger Benutzer von Exceptions und mit Qt plus VC ist alles ok.
Unter MinGW und Linux laufen die Exceptions nicht.
Die Doku zu configure sagt aber, das Exceptions immer standardmäßig eingeschaltet sind.
Wo liegt der Fehler?
tschüß
Troll.Soft

Verfasst: 1. Juni 2010 20:23
von MasterK
Schau mal nach, ob RTTI aktiv ist unter linux/gcc.

Verfasst: 1. Juni 2010 20:37
von Troll.Soft
im pro-file habe ich dieses angegeben:

Code: Alles auswählen

CONFIG	+= qt
CONFIG	+= warn_on
CONFIG	+= dll
CONFIG	+= exceptions
CONFIG	+= rtti
CONFIG	+= debug 
und dieser Code läuft sowohl mit VC als auch mit gcc korrekt

Code: Alles auswählen

qWarning() << "type = '" <<	(typeid(List)).name();
logischerweise muß rtti funktionieren.

tschüß
Troll.Soft

Re: Exceptions

Verfasst: 1. Juni 2010 20:50
von franzf
Troll.Soft hat geschrieben:Unter MinGW und Linux laufen die Exceptions nicht.
Kannst du mal ein Beispiel posten incl. Beschreibung von erwartetem und und tatsächlem Verhalten? Weil unter "Exceptions laufen nicht kann ich mir nicht viel vorstellen.
Hast du Qt selber übersetzt, oder aus einem Repository unter Linux bzw. Binary unter Windows installiert?

Verfasst: 1. Juni 2010 23:02
von Troll.Soft
wird gemacht, ist aber momentan etwas spät

Verfasst: 2. Juni 2010 10:34
von Troll.Soft
hier ist das pro-file

Code: Alles auswählen

QT	+= core

CONFIG	+= qt
CONFIG	+= warn_on
CONFIG	+= exceptions
CONFIG	+= debug 


win32-msvc2008  {
##############

TEMPLATE    = vcapp
DESTDIR     = debug.WINDOWS
OBJECTS_DIR = debug.WINDOWS

DEFINES    += WINDOWS
}

win32-g++ {
######### 

TEMPLATE    = app
DESTDIR     = debug
OBJECTS_DIR = debug

DEFINES    += MINGW
}

SOURCES     = main_test.cpp

TARGET      = main_test
hier ist der sourcecode

Code: Alles auswählen

#include <QtCore>

int main()
{
	qWarning() << "hallo world";

	try	{
		int Null	= 0;
		int A		= 123;
		int B		= A / Null;	//	hier soll die exception geworfen werden
		qWarning() << B;
	}
	catch ( ... )	{
		qWarning() << "exception error";
	}

	return 0;
}
Wie man leicht sieht, ist das Pro-File für VC2008 und den MinGW ausgelegt. QT-Version ist jeweils 4.6. Sowohl VC als auch MinGW sind selbst compiliert mit der debug = on und beide Versionen lassen sich auch debuggen. In beiden Versionen wird offenbar eine Exception ausgeworfen, aber nur die VC Version fängt sie ordnungsgemäß ein und gibt das qWarning() raus.
Die MinGW Version:
von der Kommandozeile aus gestartet führt zu eine Windowsmeldung "unknown software exception"
aus dem über Qt-Creator gestartetem gcc Debugger kommt eine Meldung "Der Prozess wurde nach dem Erhalt eines Signals vom Betriebssystem angehalten. SIGFPE Arithmetic exception"

Ich hoffe, Du kannst damit etwas anfangen.
tschüß
Troll.Soft