Déterminer quelle ligne de code a levé l’exception

Dans dotNet, une ligne lève une exception et est interceptée. Comment savoir quelle ligne dans quel fichier a lancé l’exception? Cela semble relativement simple, mais je n’arrive pas à comprendre …

Vous ne pouvez le faire que si des symboles de débogage sont disponibles.

catch(Exception ex) { // check the ex.StackTrace property } 

Si vous souhaitez déboguer une telle situation dans VS, vous devez cocher la case Thrown pour afficher la boîte de dialog Exceptions Common Language Runtime Exceptions dans Exceptions située dans le menu Debug . Le débogueur se cassera dès que l’exception sera levée, même si c’est dans un bloc try .

Personnellement, je viens de me connecter à la valeur de retour de l’exception ToSsortingng (). La trace entière de la stack est incluse. C’est une ligne de code … simple comme bonjour.

Vous pouvez utiliser la classe StackFrame :

 try { ... ... } catch(...) { StackFrame sf = new StackFrame(true); int lineNumber = sf.GetFileLineNumber(); int colNumber = sf.GetFileColumnNumber(); ssortingng fileName = sf.GetFileName(); ssortingng methodName = sf.GetMethod().Name; } 

Eh bien, dans .NET vous avez ce qu’on appelle une FirstChanceException. Celles-ci sont essentiellement lancées avant qu’une exception ne soit gérée. Il y a deux façons d’examiner la question que vous présentez ici. On est d’un angle de débogage. Si le débogage, vous pouvez simplement configurer votre débogueur pour attraper les exceptions levées à partir de la fenêtre Debug / Exceptions. C’est plus facile dans un contexte interactif. SI vous devez enregistrer ces informations dans un contexte non interactif, je ferais quelque chose de similaire à ce dont parle CMS …

 try { ... } catch(Exception ex) { System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace(ex); System.Diagnostics.StackFrame firstFrame = stackTrace.GetFrame[0]; Console.WriteLine(firstFrame.GetFileLineNumber); ... } 

La seule différence est que nous obtenons l’intégralité de la trace de stack, puis passons à la première image, qui est l’endroit où l’exception a été levée à l’origine.