From dda71c5d1bd5c8e3d85e2024e6ec8e4017da0af3 Mon Sep 17 00:00:00 2001 From: Rich Date: Tue, 5 May 2009 20:51:20 +0000 Subject: [PATCH] Added new method to get part of the stack. --- .../Volian.Controls.Library/vlnStackTrace.cs | 45 ++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/PROMS/Volian.Controls.Library/vlnStackTrace.cs b/PROMS/Volian.Controls.Library/vlnStackTrace.cs index 7f3a7fe2..00fb41b7 100644 --- a/PROMS/Volian.Controls.Library/vlnStackTrace.cs +++ b/PROMS/Volian.Controls.Library/vlnStackTrace.cs @@ -61,7 +61,50 @@ namespace Volian.Controls.Library } return sb.ToString(); } - private static StackFrame [] _LastSFS; + public static void ShowStackFirstLocal(string str) + { + Console.WriteLine(str + " " + StackToStringLocal(3,0)); + } + public static void ShowStackLocal(string str,int start) + { + Console.WriteLine(str + " " + StackToStringLocal(start,1)); + } + public static void ShowStackLocal(string str,int start, int limit) + { + Console.WriteLine(str + " " + StackToStringLocal(start, limit)); + } + private static string StackToStringLocal(int start, int limit) + { + StringBuilder sb = new StringBuilder(); + string sep = "Local Method - "; + StackTrace st = new StackTrace(true); + StackFrame[] sfs = st.GetFrames(); + int count = 0; + int localCount = 0; + foreach (StackFrame sf in sfs) + { + count++; + if (count > start) + { + if (sf.GetFileLineNumber() != 0) + { + string sMethod = sf.GetMethod().Name; + string sNamespace = sf.GetMethod().ReflectedType.Namespace; + string sType = sf.GetMethod().ReflectedType.Name; + sMethod += string.Format(" {0}[{1}]", sf.GetFileName(), sf.GetFileLineNumber()); + sb.Append(sep + string.Format("{0}.{1}.{2}", sNamespace, sType, sMethod)); + localCount ++; + if (localCount >= limit) + return sb.ToString(); + sep = "\r\n" + "".PadRight(localCount *2); + } + } + } + if (localCount > 0) + return sb.ToString(); + return "No Local Method"; + } + private static StackFrame[] _LastSFS; private static int MatchingStackFrame(StackFrame[] sfs) { int iFound = -1;