[Insight-developers] better error message for exceptions in ThreadedGenerateData()

Luis Ibanez luis.ibanez at kitware.com
Thu Sep 13 08:41:28 EDT 2007


Hi Gaetan,


          This patch is certainly a good idea.


The current message is pretty much useless, since it doesn't
tell us what the real problem was.


I have two concerns with the patch:


A) The description of the exception error is being passed to a
    "const char * details;" that is declared outside the try{}.

    I'm under the impression that the exception object only
    exists inside the scope of the catch block. Therefore by the
    time the catch block finishes the exception object will
    be destroyed leaving the "details" pointer as a dangling
    pointer, that we shouldn't use for throwing an exception
    with an extended message.

    We probably should make it a std::string instead...



B) Adding a "catch( std::exception )" after a "catch(...)" will
    not have any effect, since the catch(...) will take care of
    any exception. We probably should put it before the catch-all
    "catch(...)".



Does that make sense ?



One way or the other, I agree that we should fix this,
We have had many frustrating encounters with the same
error message that just tell than an exception happened
but don't give any details of the original problem.



     Thanks


       Luis


-----------------------
Gaëtan Lehmann wrote:
> 
> Hi,
> 
> I'm debuging some threaded code currently, and I found the error  report 
> really non-informative. Something like
> 
> Progress  | 0 | 0.3 | 0.3 | 0.6terminate called after throwing an  
> instance of 'itk::ExceptionObject'
>   what():  /home/glehmann/src/Insight/Code/Common/ 
> itkMultiThreader.cxx:405:
> itk::ERROR: MultiThreader(0x8176608): Exception occurred during  
> SingleMethodExecute
> 
> I simply have no idea where the problem is, excepted that it may be  in 
> a threaded method. So I tried to modified the MultiTreader code to  
> return more information about what happened. The patch is attached.  I'm 
> now get something like
> 
> Progress  | 0 | 0.3 | 0.3 | 0.6terminate called after throwing an  
> instance of 'itk::ExceptionObject'
>   what():  /home/glehmann/src/Insight/Code/Common/ 
> itkMultiThreader.cxx:405:
> itk::ERROR: MultiThreader(0x8176608): Exception occurred during  
> SingleMethodExecute
> /home/glehmann/src/contrib-itk/binaryAttributeMorphology/ 
> itkLabelPerimeterEstimationCalculator.h:83:
> itk::ERROR: LabelPerimeterEstimationCalculator(0x81c6928): Unknown  
> label: 0
> Abandon
> 
> Clearly, a better message to search for a bug :-)
> 
> I'm not a thread expert, so maybe there is something wrong with that  
> patch - any comment is welcome.
> 
> Gaëtan
> 
> 
> -- 
> Gaëtan Lehmann
> Biologie du Développement et de la Reproduction
> INRA de Jouy-en-Josas (France)
> tel: +33 1 34 65 29 66    fax: 01 34 65 29 09
> http://voxel.jouy.inra.fr
> 
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Insight-developers mailing list
> Insight-developers at itk.org
> http://www.itk.org/mailman/listinfo/insight-developers


More information about the Insight-developers mailing list