Resourcenschutzblock try..catch(..) funktioniert nicht

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
jasper
Beiträge: 60
Registriert: 3. Februar 2009 11:36
Wohnort: Hamburg

Resourcenschutzblock try..catch(..) funktioniert nicht

Beitrag von jasper »

Hallo Forum,
der Resourcenschutzblock

Code: Alles auswählen

try
{
   Mein Code
}
catch (...)
{
   Exceptionbehandlung
}
funktioniert leider nicht. Der Compiler jedoch zeigt keinen
Fehler an. Im Fall einer Exception/Segmentation Fault wird
der catch-Block nicht durchlaufen. Die Anwendung stürzt
irgendwo ab und keiner weiß so recht wo bzw. die Fehlersuche
ist sehr aufwendig.
Ich arbeite mit SUSE 10.1 und Debian 4.0 "Etch" unter
KDE/KDevelop 3.5.1 mit QT 4.3.2 .
Hat irgend jemand eine Idee?

Gruß

Jasper
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Das wirst Du selbst debuggen müssen, den Fehlermeldungen wie "Funktioniert nicht, warum?" wird dir hier keiner beantworten können.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Ich wüsste außerdem nicht, dass man mit Exceptions nen SegFault abfangen könnte. Oder lieg ich da falsch?
Mein Test grad hat jedenfalls nicht funktioniert...
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

Ich nehme an, du hast vorher .Net oder Java programmiert :wink:
In C++ ist das Exceptionhandling mit "try/catch" nicht gleich mächtig wie in diesen Sprachen und bringt allerlei Probleme mit sich. So können z.B. Fehler, die das BS feststellt und (unter Unix) mittels Signals melden (SIGSEGV, SIGBUS, usw.) nicht abgefangen werden.
Mit anderen Worten: Wenn du mit Pointern rumbastelst und diese nicht im Griff hast, hast du ein Problem....!

Dazu kommen weitere Probleme, wie z.B. dass nicht alle von Qt unterstützten Compiler sauber damit umgehen können und dieses Konzept nicht auf Qt passt (was soll mit Exceptions geschehen, welche in Slots geworfen werden.. wie sollte QCoreApplication damit umgehen?).

Lange Rede kurzer Sinn: Weil nicht alle Ausnahmen behandelt und alle anderen problemlos auch ohne Exceptions abgefangen werden können, verzichten viele Entwickler komplett auf C++-Exceptions. Dein Problem musst du mit Debugger (gdb) oder Profiler (valgrind) finden.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ein Segfault erzeugt keine Exception soweit ich weiß. Da ist wohl valgrind eine wesentlich bessere Möglichkeit dem Problem auf die Spur zu kommen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
jasper
Beiträge: 60
Registriert: 3. Februar 2009 11:36
Wohnort: Hamburg

Beitrag von jasper »

Hallo Forum,
Danke für eure Beiträge. Ich habe vorher unter Windows mit
JBulilder, Delphi und C++Builder von Borland gearbeitet.
Bei diesen Tools ist das Exception-Handling via try--catch kein Problem bzw. man kann im Fall der Fälle definiert aussteigen. Ich arbeite zur Zeit mit C++/QtopiaCore unter Linux auf einem embedded PowerPC-System.
Wenn es hier kracht, dann ist der QWS-Server plötzlich weg und die
Fehlersuche dann recht aufwendig.
Daher habe ich die Möglichkeit des "definierten Aussteigens" ein wenig
vermisst.

Gruß

Jasper
Antworten