Exceptions and plugins

Verschiedenes zu Qt
Antworten
shaka
Beiträge: 27
Registriert: 8. November 2006 10:36
Wohnort: München

Exceptions and plugins

Beitrag von shaka »

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. (Idee ist, noch einen Eintrag ins Log-File zu schreiben, eine Ausgabe für den Anwender zu erzeugen etc.). Etwa so:

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
    }
};
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).
Undefined
Beiträge: 34
Registriert: 19. Oktober 2006 17:12

Beitrag von Undefined »

Exceptions werden ab gcc 4.* Automatisch eingebunden, jedoch stellen viele Dsitribution's diese Option auf off weil es ein Performance Verbesserung darstellt und der Code somit auch portable zu anderen Architekturen ist. Stellt sich also die Frage was dein Distributor gemacht hat. Sind bei dir die QtXmlPatterns vorhanden ? Wenn nein - dann wurde Exceptions deaktiviert.
Antworten