type d'une exception

type d'une exception - C++ - Programmation

Marsh Posté le 04-04-2003 à 08:43:36    

Bonjour,
 
 
Ma question concerne la détermination du type d'une exception. Supposons que je link mon programme avec une librairie statique que je ne peux pas modifier. Afin de ne pas planter lamentablement à l'execution, je me dis que je voudrais catcher des exceptions possibles.
Si l'exception est du à une division par 0 ou par une mauvaise utilisation d'un pointeur nul, on peut tout à fait penser qu'il est justifié de continuer le programme une fois l'erreur détéctée. Par contre, si le code dans lequel se produit l'erreur ne fais pas explicement un throw d'une exception comme std::runtime_exception, comment connaitre le type d'exception.
 
En pratique, je fais:
 

Code :
  1. try
  2.    {       
  3.         malibrariecall( mes_arguments, ... );
  4.    }
  5.    catch( std::runtime_error & e )
  6.    {
  7.         //... bla bla bla
  8.    }
  9.    catch( std::exception & e )
  10.    {
  11.         //... bla bla bla
  12.    }
  13.    catch( ... )
  14.    {
  15.         // si passe ici, c'est que je ne connais pas le
  16.         // type de l'exception que je traite
  17.         //... bla bla bla
  18.    }


 
Si le code dans la librarie fais une division par 0, alors l'exception qui est catchée n'est pas une eception standard. Peut  on savoir de quel type d'exception il s'agit?
 
Merci.

Reply

Marsh Posté le 04-04-2003 à 08:43:36   

Reply

Marsh Posté le 04-04-2003 à 16:04:58    

Je me réponds à moi même:
 
j'ai l'impression que sous unix, le seul moyen que j'ai est d'utiliser les signaux ou les fonctions du genre setjmp. Une exception de type erreur arithmétique semble ne pas générer une exception au sens c++ du terme, si bien qu'il n'est pas possible de catcher quoi que ce soit... C'est fort dommage :(
 
sous windows, au contraire, une exception 'system' est gérée en temps qu'exception C++. De plus il semble que l'on peut s'en sortir avec la fonction _set_se_translator qui permet de traiter l'exception, par exemple en regardant le code de l'exception et en faisant alors un throw d'un type connu. Cela me permet de catcher une exception si une fonction effectue une division par zéro et de continuer. Il semblerait par contre que ce traitement d'exception system doive être initialisé pour chaque thread du processus.
 
 
Je cherche donc le moyen, sous linux/unix, de faire comme sous windows: pouvoir intercepter une exception en faisant un try/catch lors de l'appel de la fonction plutôt que d'intercepter un signal.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed