Gestion des exceptions (Kit de développement logiciel (SDK) Visual Studio

L’exemple suivant décrit le processus qui se produit lorsque des exceptions sont levées.

Processus de gestion des exceptions

  1. Lorsqu’une exception est levée pour la première fois, mais avant qu’elle ne soit gérée par le gestionnaire d’exceptions dans le programme en cours de débogage, le moteur de débogage (DE) envoie un IDebugExceptionEvent2 au gestionnaire de débogage de session (SDM) comme événement d’arrêt. Il IDebugExceptionEvent2 est envoyé si seuls les paramètres de l’exception (spécifiés dans la boîte de dialogue Exceptions dans le package de débogage) spécifient que l’utilisateur souhaite s’arrêter sur les notifications d’exception de première chance.

  2. Le SDM appelle IDebugExceptionEvent2 ::GetException pour obtenir la propriété d’exception.

  3. Le package de débogage appelle IDebugExceptionEvent2 ::CanPassToDebuggee pour déterminer les options à présenter à l’utilisateur.

  4. Le package de débogage demande à l’utilisateur comment gérer l’exception en ouvrant une boîte de dialogue d’exception de première chance.

  5. Si l’utilisateur choisit de continuer, le SDM appelle IDebugExceptionEvent2 ::CanPassToDebuggee.

    • Si la méthode retourne S_OK, appelle IDebugExceptionEvent2 ::P assToDebuggee.

      -ou-

      Si la méthode retourne S_FALSE, le programme en cours de débogage a une deuxième chance de gérer l’exception.

  6. Si le programme en cours de débogage n’a aucun gestionnaire pour une exception de deuxième chance, le DE envoie un IDebugExceptionEvent2 SDM en tant que EVENT_SYNC_STOP.

  7. Le package de débogage demande à l’utilisateur comment gérer l’exception en ouvrant une boîte de dialogue d’exception de première chance.

  8. Le package de débogage appelle IDebugExceptionEvent2 ::CanPassToDebuggee pour déterminer les options à présenter à l’utilisateur.

  9. Le package de débogage demande à l’utilisateur comment gérer l’exception en ouvrant une boîte de dialogue d’exception de deuxième chance.

  10. Si la méthode retourne S_OK, appelle IDebugExceptionEvent2::PassToDebuggee.