Réponses:
Jetez un œil à l' System.Diagnosticsespace de noms. Beaucoup de goodies là-dedans!
System.Diagnostics.StackTrace t = new System.Diagnostics.StackTrace();
C'est vraiment bien d'avoir un coup d'œil pour savoir ce qui se passe sous le capot.
Je vous recommande de jeter un œil aux solutions de journalisation (telles que NLog, log4net ou les modèles et pratiques Microsoft Enterprise Library) qui peuvent atteindre vos objectifs, puis certaines. Bonne chance mec!
Une alternative à System.Diagnostics.StackTraceconsiste à utiliser System.Environment.StackTrace qui retourne une représentation sous forme de chaîne de la trace de pile.
Une autre option utile consiste à utiliser les variables de débogage$CALLER et $CALLSTACK dans Visual Studio car cela peut être activé au moment de l'exécution sans reconstruire l'application.
Environment.StackTracejuste nouveau est une instance de StackTrace.
System.Environment.StackTracepourrait être un moyen plus pratique d'accéder à ces informations.
System.Diagnostics.StackTrace- voir msdn.microsoft.com/en-us/library/…
Environment.StackTracecommence toujours par at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo) at System.Environment.get_StackTrace()? Cela ne fait pas partie de la trace de pile actuelle au moment où quelqu'un la recherche.
Il y a deux façons de faire ça. Le System.Diagnostics.StackTrace()vous donnera une trace de pile pour le thread actuel. Si vous avez une référence à une Threadinstance, vous pouvez obtenir la trace de pile pour cela via la version surchargée de StackTrace().
Vous pouvez également consulter la question de dépassement de pile Comment obtenir la trace de pile d'un thread non actuel? .
Vous pouvez également le faire dans le débogueur Visual Studio sans modifier le code.
Bien sûr, cela n'aide pas si vous exécutez le code sur une autre machine, mais il peut être très pratique de pouvoir cracher automatiquement une trace de pile sans affecter le code de publication ou sans même avoir besoin de redémarrer le programme.
Console.WriteLine(
new System.Diagnostics.StackTrace().ToString()
);
La sortie sera similaire à:
à YourNamespace.Program.executeMethod (String msg)
à YourNamespace.Program.Main (String [] args)
Remplacez Console.WriteLinepar votre Logméthode. En fait, il n'est pas nécessaire .ToString()pour le boîtier Console.WriteLine comme il l'accepte
object. Mais vous en aurez peut-être besoin pour votre méthode Log (string msg).
private void ExceptionTest()
{
try
{
int j = 0;
int i = 5;
i = 1 / j;
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
var stList = ex.StackTrace.ToString().Split('\\');
Console.WriteLine("Exception occurred at " + stList[stList.Count() - 1]);
}
}
Semble travailler pour moi
StackTraceest lent - utilisez-le avec parcimonie.