J'ai un code C # régulier. Je n'ai aucune exception . Je souhaite enregistrer par programme la trace de pile actuelle à des fins de débogage. Exemple:
public void executeMethod()
{
logStackTrace();
method();
}
c#
.net
logging
stack-trace
printstacktrace
Ricibald
la source
la source
StackTrace
est lent - utilisez-le avec parcimonie.Une alternative à
System.Diagnostics.StackTrace
consiste à 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.la source
Environment.StackTrace
juste nouveau est une instance deStackTrace
.System.Environment.StackTrace
pourrait être un moyen plus pratique d'accéder à ces informations.System.Diagnostics.StackTrace
- voir msdn.microsoft.com/en-us/library/…Environment.StackTrace
commence toujours parat 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 à uneThread
instance, vous pouvez obtenir la trace de pile pour cela via la version surchargée deStackTrace()
.Vous pouvez également consulter la question de dépassement de pile Comment obtenir la trace de pile d'un thread non actuel? .
la source
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.
la source
La sortie sera similaire à:
Remplacez
Console.WriteLine
par votreLog
méthode. En fait, il n'est pas nécessaire.ToString()
pour le boîtier Console.WriteLine comme il l'accepteobject
. Mais vous en aurez peut-être besoin pour votre méthode Log (string msg).la source
Semble travailler pour moi
la source