Exceptions and plugins
Verfasst: 21. April 2009 11:45
Hallo!
Wir kämpfen hier mit dem Problem, exceptions zu fangen, die in einem Plugin geworfen wurden. Genauer:
Unser Programm besteht im wesentlichen aus einer main()-Routine, die zahlreiche Plugins lädt - die eigentliche Arbeit findet dann dort statt. Wir würden nun gern in der main-Funktion alles mit einem try/catch-Block umgeben, um alle Exceptions, die irgenwo ungefiltert durchkommen, noch abfangen zu können.
dee ist, noch einen Eintrag ins Log-File zu schreiben, eine Ausgabe für den Anwender zu erzeugen etc.). Etwa so:
Leider werden Exceptions, die in den Plugins ausgelöst werden, vom catch-Block in main nicht gefangen - innerhalb der Plugins funktionieren die Exceptions dagegen wunderbar.
Also die Frage: Funktionieren exceptions über Grenzen von shared libs hinweg? Speziell mit Plugins? Fehlen uns zusätzliche compiler-Flags? Leider bin ich beim googeln nicht fündig geworden...
Danke für Eure Hilfe!
Shaka
P.S: Die Verwendung von exceptions steht außer Frage, da wir Third-Party-Code haben, der darauf aufbaut.
P.P.S: System ist im Augenblick Ubuntu 8.10, gcc 4.3.2 - es sollte später aber auch mal unter Windows gehen (da darf ich noch gar nicht daran denken).
Wir kämpfen hier mit dem Problem, exceptions zu fangen, die in einem Plugin geworfen wurden. Genauer:
Unser Programm besteht im wesentlichen aus einer main()-Routine, die zahlreiche Plugins lädt - die eigentliche Arbeit findet dann dort statt. Wir würden nun gern in der main-Funktion alles mit einem try/catch-Block umgeben, um alle Exceptions, die irgenwo ungefiltert durchkommen, noch abfangen zu können.
Code: Alles auswählen
int main(int argc, char** argv)
{
try
{
QApplication app;
Loader loader(&app);
QTimer::singleShot(0, &laoder, SLOT(LoadPlugins()));
app.exec();
}
catch(...)
{
// handle exception
}
};
Also die Frage: Funktionieren exceptions über Grenzen von shared libs hinweg? Speziell mit Plugins? Fehlen uns zusätzliche compiler-Flags? Leider bin ich beim googeln nicht fündig geworden...
Danke für Eure Hilfe!
Shaka
P.S: Die Verwendung von exceptions steht außer Frage, da wir Third-Party-Code haben, der darauf aufbaut.
P.P.S: System ist im Augenblick Ubuntu 8.10, gcc 4.3.2 - es sollte später aber auch mal unter Windows gehen (da darf ich noch gar nicht daran denken).