Seite 1 von 1

Resourcenschutzblock try..catch(..) funktioniert nicht

Verfasst: 18. März 2009 20:51
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

Verfasst: 19. März 2009 07:34
von macman
Das wirst Du selbst debuggen müssen, den Fehlermeldungen wie "Funktioniert nicht, warum?" wird dir hier keiner beantworten können.

Verfasst: 19. März 2009 09:13
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...

Verfasst: 19. März 2009 09:19
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.

Verfasst: 19. März 2009 09:19
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.

Verfasst: 20. März 2009 18:07
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