[odb-users] ODB exception problem

cetoni GmbH - Uwe Kindler uwe.kindler at cetoni.de
Thu Jun 9 07:26:54 EDT 2011


Hi,

while evaluating ODB we stumbled on a serious problem catching 
exceptions from libodb.

The following example shows the problem

int main()
{
     boost::shared_ptr<database> db;
     cout << "Hello World!!!" << endl;
     db = boost::shared_ptr<database>(new odb::sqlite::database(
     "test.db", SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE));
     transaction t(db->begin());
     try
     {
         odb::schema_catalog::create_schema (*db);
     }
     catch (odb::unknown_schema& ex)
     {
         std::cout << ex.what() << std::endl;
     }
     catch (...)
     {
         std::cout << "Exception" << std::endl;
     }
     t.commit();
     return 0;
}

This application produces the following output:

This application has requested the Runtime to terminate it in an unusual 
way.
Please contact the application's support team for more information.
Hello World!!!
terminate called after throwing an instance of 'odb::unknown_schema'
   what():  unknown database schema ''

The "Hello World!!!" message appears on stdout and the rest appares on 
stderr if I start the application in eclipse.

If I insert the following line

throw odb::unknown_schema("Test");

before odb::schema_catalog::create_schema (*db); then I get the 
following output:

Hello World!!!
unknown database schema 'Test'

So it seems like it is not possible to catch exceptions thrown from 
libodb because normally the application should run into the first catch 
block because odb::schema_catalog::create_schema (*db) throws an 
unknown_schema exception like it happens if I insert the throw 
odb::unknown_schema("Test") command . This is quite strange because we 
use DLLs extensively and never discovered such a problem. We discovered 
the problem in our Qt application and I created this tiny exampleto 
check if it is a problem of our Qt application or if this problem 
occures always.

Our environment:

Windows 7
MinGW with GCC4.5.1
libodb configuration: ./configure --disable-static 
LDFLAGS="-Wl,--enable-auto-import"

We have no idea what could cause this problem but ist must be something 
in libodb compilation or linkage because we never had any problems to 
throw exceptions across DLL boundaries.

Any idea what goes wrong here?

Thank you for any help.





More information about the odb-users mailing list