2010-07-27 26 views
2

Ceci est principalement de la curiosité, mais j'ai lu sur l'histoire de Visual Studio attraper les exceptions SEH dans une construction C++ try-catch. Je continue à courir à travers l'assertion que les anciennes versions de Visual Studio avec l'option/GX activée "attraperaient parfois" des exceptions structurées Win32 dans un bloc C++ catch.Quand Visual Studio 6 récupère-t-il des exceptions structurées?

Dans quelles circonstances Visual Studio 6.0 va-t-il entrer le bloc catch dans le code suivant lorsqu'il est construit avec l'indicateur/GX?

char * p = NULL; 

try 
{ 
    *p = 'A'; 
} 
catch(...) 
{ 
    printf("In catch\n"); 
} 

Dans mes propres tests simples avec Visual Studio 6 + exécution du programme SP6 à l'exception des haltes unhanded et "Catch" est jamais imprimé. Cependant, certains articles (comme this un) me portent à croire qu'il est possible d'entrer dans le bloc catch.

+0

Incertain ce que vous demandez au sujet - qu'est-ce que « la terre dans le bloc catch "signifie? Aussi, demandez-vous sur l'environnement de développement ou l'environnement d'exécution? –

+0

Il y avait quelques fautes de frappe dans cette phrase. Je l'ai édité pour (espérons-le) être plus clair. – Scott

Répondre

0
int main() 
{ 
    __try 
    { 
     int *pInt = NULL; 
     *pInt = 0;// throw some kind of exception 
    } 
    __except(EXCEPTION_EXECUTE_HANDLER) 
    { 
     DWORD dw = GetExceptionCode(); 
     switch(dw) 
     { 
     case EXCEPTION_ACCESS_VIOLATION: 
      cout << "access violation\n"; 
      break; 
     case EXCEPTION_INT_DIVIDE_BY_ZERO: 
      cout << "int divide by zero\n"; 
      break; 
     case EXCEPTION_FLT_DIVIDE_BY_ZERO: 
      cout << "floating point divide by zero\n"; 
      break; 
     // other cases 
     } 
    } 
    return 0; 
} 

Cest peut-être la seule façon que j'ai trouvé Regard sur le net.

aussi que je peux deviner Même vous savez pourquoi il est bon de traiter ces exceptions, toujours pour Googlers venir ici, ne lisez:

http://members.cox.net/doug_web/eh.htm#Q1

+0

Q2 dans le lien que vous avez fourni répond à ma question exactement. Merci! – Scott

+0

J'espérais que vous l'aviez lu avant de demander, en voyant à quel point je l'ai eu sur google. En tout cas bonne curiosité. Pas tous vont et se retournent à la recherche de ceux-ci. :) – loxxy

+0

Ouais, je ne sais pas comment j'ai raté ce lien. Mais, merci de l'avoir signalé. – Scott