IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Migration vs2003 -> vs2005: Catch exceptions


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Par défaut Migration vs2003 -> vs2005: Catch exceptions
    Salut,

    J'ai migre une application de Visual Studio 2003 vers Visual Studio 2005.
    Je suis confronte a un probleme avec le catch d'exceptions.

    Le programme catche bien toutes les exceptions / crash sous VS2003, par contre sous 2005 toutes les exceptions ne sont pas catchees.

    exemple de code qui catch le crash en 2003 et pas en 2005 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void myfunc2()
    {
    	try
    	{
    		vector<string> a = Split("rrrr", "a", false);
    		a[20] = 's';
    	}
    	catch (...)
    	{
    		printf("CRASH!!\n");
    	}
    }
    J'ai fait le tour des proprietes du vcproj mais sans succes. (CLR, SEH...)

    Pouvez vous m'aidez ?
    Je dois a tout prix etre en mesure de catcher tout type de crash possible puisque mon programme utilise des DLL fournies par des utilisateurs, donc on ne peut pas les considerees fiables a 100% et ca ne doit pas mettre en peril l'application.

    Merci d'avance !

  2. #2
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut
    Ton exemple met en péril la pile. Si elle est corrompue le catch ne fonctionnera pas. Si ça fonctionne en vs2003, je pense que c'est un coup de bol.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Par défaut
    Citation Envoyé par camboui Voir le message
    Ton exemple met en péril la pile. Si elle est corrompue le catch ne fonctionnera pas. Si ça fonctionne en vs2003, je pense que c'est un coup de bol.
    Peux tu expliquer plus en details ?


    En tout cas il semble que visual 2005 ne gere pas du tout de la meme facon les exceptions et j'ai du mal a arriver a tout catcher (je suis bien conscient que dans certains cas ca peu corrompre la memoire et mettre en peril tout le contexte d'execution).

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut
    Remplace ta ligne
    a[20] = 's';
    par
    a.at(20) = 's';
    pour voir...

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Par défaut
    Oui en effet utiliser .at() fonctionne, l'erreur est catchee.

    Sauf que dans mon cas je ne sais pas comment vont coder mes utilisateurs et je souhaite dans 99% des cas etre en mesure de catcher l'erreur.

    Quelle difference y a-t-il entre VS2003 et VS2005 pour que l'un le gere tres bien et pas l'autre ?
    N'y a-t-il pas moyen de configurer mon projet pour que ca foncitonne de la meme facon ?

  6. #6
    Membre expérimenté Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    Par défaut
    L'opérateur [] du vector n'est pas sensé tester la validité de l'index, mais "at" si.
    Cela dit, souvent l'opérateur test quand même la validé de l'index en mode debug.
    Donc les explications que je vois sont:
    - Ton projet VS2003 est en debug mais pas ton projet VS2005(sans oublier le #define _DEBUG et NDEBUG qu'utilise peut-etre ta STL). Dans ce cas il suffit de bien configurer ton projet.
    - VS2003 test en debug, et pas VS2005. Dans ce cas(mais je serais surpris), il doit être possible de modifier un tout petit peut ta STL, et de rajouter ce test en mode debug.(J'ai eu exactement ce problème sous borland).

Discussions similaires

  1. [VB.NET] Migration VS2003 vers VS2005 & Framework 2.0
    Par ag007 dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 03/09/2007, 14h46
  2. Problème de migration vs2003 vs2005
    Par shenron666 dans le forum VC++ .NET
    Réponses: 9
    Dernier message: 13/07/2007, 23h13
  3. probleme try catch, Exception
    Par Slumpy dans le forum VB.NET
    Réponses: 9
    Dernier message: 23/03/2007, 15h51
  4. VS2003 et VS2005
    Par Invité dans le forum Visual Studio
    Réponses: 2
    Dernier message: 30/10/2006, 17h23
  5. [VS2003][C#][liste des exceptions]
    Par lafleurlafleur dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/11/2005, 11h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo