donderdag 15 november 2007

Intressante informatie uit de StackTrace in .Net

Stack trace (ook wel stack backtrace of stack traceback genoemd) is een overzicht van actieve stack frames welke door een programma zijn uitgevoerd.
De StackTrace is bij de meeste .Net ontwikkelaars bekend als de extra debug informatie die het Exception object bevat.

De StackTrace is in .Net altijd op te vragen en kan (bijvoorbeeld ten behove van logging) handige informatie opleveren. Hiervoor kan het StackTrace object in de System.Diagnostics namespace gebruikt worden. Het nadeel van de informatie die je via de GetFrames() methode terugkrijgt, is dat dit veel te gedetailleerd is. Veel informatie over de interne calls binnen het .Net framework zelf, is hierin opgenomen. Om toch de relevante informatie uit de StackTrace te krijgen kan het controleren van de aanwezigheid van de FileName eigenschap van een StackFrame hulp bieden.
Hieronder de code die alleen deze relevante informatie uit de StackTrace haalt en in een string teruggeeft:

public static string GetStackTrace()
{
StringBuilder sb = new StringBuilder();
StackTrace stack = new StackTrace(true);

foreach (StackFrame frame in stack.GetFrames())
{
if (!string.IsNullOrEmpty(frame.GetFileName()))
sb.AppendFormat("{0}.{1} (line:{2} col:{3})\r\n",
frame.GetMethod().DeclaringType.FullName, frame.GetMethod().Name,
frame.GetFileLineNumber(), frame.GetFileColumnNumber());
}

return sb.ToString();
}



Bronnen:
WikiPedia
Microsoft

Geen opmerkingen: