MGD Software
Messages postés193Date d'inscriptionvendredi 1 septembre 2006StatutMembreDernière intervention23 avril 2022
-
Modifié le 12 avril 2019 à 18:49
MGD Software
Messages postés193Date d'inscriptionvendredi 1 septembre 2006StatutMembreDernière intervention23 avril 2022
-
13 avril 2019 à 14:07
Bonjour,
N'aimant pas que mes applications se terminent en eau de boudin, je protège les instructions délicates par des blocs try/catch de façon traditionnelle :
Seulement, lors de la mise au point en mode debug, on passe direct dans le traitement d'erreur et il est difficile de savoir quelle instruction a planté.
J'ai contourné le problème en mettant des instruction conditionnelle sur le try et le catch :
C'est TRÈS lourd !
Et en plus avec ce système il est très compliqué d'utiliser la clause finally.
J'ai eu beau chercher dans la multitude d'options, notamment dans Débogage, je n'ai rien trouvé qui me permettrait d'inhiber le traitement des exceptions, surtout provisoirement. Et rien trouvé sur le Web.
Quelqu'un connaitrait-il une solution plus simple que la mienne pour qu'en debug on ne passe pas dans le traitement d'erreur mais que l'exception bloque l'exécution au niveau de la ligne à problème ?
Pour s'arrêter sur la ligne qui plante, je ne connais pas d'autre solution qu'inhiber les try.
La compilation conditionnelle est certes lourde, mais c'est fait une fois pour toute.
Tu peux aussi les commenter / décommenter avec un ctrl+F, mais là il faut le faire à chaque fois.
Sinon, tu mets des points d'arrêt dans les catch et tu regardes la StackTrace, elle te dit le fichier et le numéro de la ligne
MGD Software
Messages postés193Date d'inscriptionvendredi 1 septembre 2006StatutMembreDernière intervention23 avril 20222 13 avril 2019 à 09:40
En ce qui concerne "Traitement différencié", j'avais compris "en fonction du mode debug ou release", et non en fonction du type d'exception. Je pratique ce dernier sans problème.
MGD Software
Messages postés193Date d'inscriptionvendredi 1 septembre 2006StatutMembreDernière intervention23 avril 20222 13 avril 2019 à 09:37
La StackTrace, c'est bien la pile des appels?
J'ai fait un test avec un throw, et sur le point d'arrêt dans le catch, j'y trouve la ligne du catch, puis la ligne de la fonction qui appelle celle où ça plante, mais pas la ligne où se produit l'exception avec le throw.
Ou alors, la StackTrace n'est pas la pile des appels, et alors comment l'obtient-on ?
Whismeril
Messages postés18605Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention23 septembre 2023628 13 avril 2019 à 11:03
ex.StackTrace
MGD Software
Messages postés193Date d'inscriptionvendredi 1 septembre 2006StatutMembreDernière intervention23 avril 20222
>
Whismeril
Messages postés18605Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention23 septembre 2023 13 avril 2019 à 11:46
Génial! J'ai encore appris quelque chose.
Le dommage, c'est que Console.Write() ne fonctionne toujours pas, j'aurais pu m'en servir. Mais avec un point d'arrêt dans le catch et la fenêtre Execution (ou Automatique), je vais m'en tirer.
Merci.
Whismeril
Messages postés18605Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention23 septembre 2023628 13 avril 2019 à 11:47
de rien
Vous n’avez pas trouvé la réponse que vous recherchez ?
MGD Software
Messages postés193Date d'inscriptionvendredi 1 septembre 2006StatutMembreDernière intervention23 avril 20222 13 avril 2019 à 14:07
Dans mon traitement d'erreur (fonction ErrorHandling.TraiteErreur dans le code ci-dessus), je pouvais déjà récupérer le nom de la classe et de la fonction qui provoquait l'erreur.
Grâce à StackTrace et un Regex qui va bien, j'ai pu y ajouter le numéro de ligne, information importante qui me manquait cruellement. Du coup, je n'ai plus besoin des #if pour gérer les exceptions.