[Précédent (date)] [Suivant (date)] [Précédent (sujet)] [Suivant (sujet)] [Index par date] [Index par sujet]
Bug dans g++ et LinuxPPC re: throw/catch
- To:
- Subject: Bug dans g++ et LinuxPPC re: throw/catch
- From: Pierre Sarrazin <>
- Date: Mon, 14 Feb 2000 16:59:03 -0500
Je constate une bizarrerie avec LinuxPPC et g++ et je voudrais confirmer
que ce n'est pas spécifique à ma machine. Un throw devrait être attrapé
par un catch mais ne l'est pas.
Si vous téléchargez l'archive
http://www3.sympatico.ca/sarrazip/bug-throw-linuxppc.tar.gz
vous aurez un petit programme illustrant le
problème. Il faut que g++ soit installé. Voici comment vous pouvez
l'essayer pour me dire comment il se comporte:
- déployez l'archive dans un répertoire quelconque; ceci va créer un
sous-répertoire 'bug-throw-linuxppc' et quelques fichiers dans ce
dernier:
tar xzf bug-throw-linuxppc.tar.gz
- cd bug-throw-linuxppc
- make
- ./go
Cette dernière commande devrait afficher les lignes suivantes:
try: correcteurd.cpp:16
catch!
apres catch: correcteurd.cpp:18
avant new
apres new
correction
fin
Si votre LinuxPPC a cependant le même problème que le mien, la commande
devrait plutôt afficher les deux lignes suivantes:
try: correcteurd.cpp:16
Aborted
Voici le code de main(): c'est le premier throw qui appelle
terminate(), comme s'il n'y avait pas de catch(...).
int main(int argc, char *argv[])
{
cerr << "try: " << __FILE__ << ":" << __LINE__ << endl;
try { throw 1844; } catch (...) { cerr << "catch!" << endl; }
cerr << "apres catch: " << __FILE__ << ":" << __LINE__ << endl;
CService *leService = NULL;
try
{
cerr << "avant new" << end