Archived

This forum has been archived. Please start a new discussion on GitHub.

Uncatcheable exception

I am using ICE 3.2.1 with C++.
In the method that is supposed to send something out, somewhere deep, the exception is thrown, and the program is aborted. No way to catch that exception. There is no information in the exception that would tell me what went wrong. Seems like they catch that exception somewhere inside and decide to exit. Here is how it looks:

terminate called after throwing an instance of 'DataFabric::V1:: DataServiceException'
what(): N10DataFabric2V120DataServiceExceptionE


Seems like this happens somewhere in the generated code, because DataServiceException is defined in my ICE file.

Using debugger, I figured that it is related to the __og.invoke() method returning false. It is very difficult to get more detailed information about what is happening, even with debugger.

Questions:

1. Did anybody experience anything similar? What was the problem?
2. If there is something wrong with my code, I would like to see at least some hint in the exception message. Might be an ICE bug though.
3. If the #2 is true, is it fixed in 3.3.1?

Comments

  • Do you use exception specifications in your C++ code? It's possible that one of your functions throws an instance of this exception, but doesn't have the exception in its exception specification. If so, that causes a call to unexpected(), which calls terminate() by default.

    I doubt that this a problem with Ice. If you can provide a self-contained example that demonstrates the problem, we'll take a look at it.

    Cheers,

    Michi.
  • matthew
    matthew NL, Canada
    With the debugger you can turn on break on C++ exceptions, and that should tell you where the exception itself is raised. If the exception itself is raised from the Ice runtime, it would be better if you also have Ice built with debugging to help diagnose this issue.