public override string ToString () { string newline = String.Format ("{0} {1} ", Environment.NewLine, Locale.GetText ("at")); string unknown = Locale.GetText ("<unknown method>"); string debuginfo = Locale.GetText (" in {0}:line {1}"); StringBuilder sb = new StringBuilder (); for (int i = 0; i < FrameCount; i++) { StackFrame frame = GetFrame (i); if (i > 0) sb.Append (newline); else sb.AppendFormat (" {0} ", Locale.GetText ("at")); MethodBase method = frame.GetMethod (); if (method != null) { // Method information available sb.AppendFormat ("{0}.{1}", method.DeclaringType.FullName, method.Name); /* Append parameter information */ sb.Append ("("); ParameterInfo[] p = method.GetParameters (); for (int j = 0; j < p.Length; ++j) { if (j > 0) sb.Append (", "); Type pt = p[j].ParameterType; bool byref = pt.IsByRef; if (byref) pt = pt.GetElementType (); if (pt.IsClass && pt.Namespace != String.Empty) { sb.Append (pt.Namespace); sb.Append ("."); } sb.Append (pt.Name); if (byref) sb.Append (" ByRef"); sb.AppendFormat (" {0}", p [j].Name); } sb.Append (")"); } else { // Method information not available sb.Append (unknown); } if (debug_info) { // we were asked for debugging informations // but that doesn't mean we have the debug information available string fname = frame.GetSecureFileName (); if (fname != "<filename unknown>") sb.AppendFormat (debuginfo, fname, frame.GetFileLineNumber ()); } } return sb.ToString (); }
bool AddFrames(StringBuilder sb) { bool any_frame = false; for (int i = 0; i < FrameCount; i++) { StackFrame frame = GetFrame(i); if (frame.GetMethod() == null) { if (any_frame) { sb.Append(Environment.NewLine); } sb.Append(prefix); string internal_name = frame.GetInternalMethodName(); if (internal_name != null) { sb.Append(internal_name); } else { sb.AppendFormat("<0x{0:x5} + 0x{1:x5}> <unknown method>", frame.GetMethodAddress(), frame.GetNativeOffset()); } } else { GetFullNameForStackTrace(sb, frame.GetMethod(), any_frame, out var skipped); if (skipped) { continue; } if (frame.GetILOffset() == -1) { sb.AppendFormat(" <0x{0:x5} + 0x{1:x5}>", frame.GetMethodAddress(), frame.GetNativeOffset()); if (frame.GetMethodIndex() != 0xffffff) { sb.AppendFormat(" {0}", frame.GetMethodIndex()); } } else { sb.AppendFormat(" [0x{0:x5}]", frame.GetILOffset()); } var filename = frame.GetSecureFileName(); if (filename[0] == '<') { var mvid = frame.GetMethod().Module.ModuleVersionId.ToString("N"); var aotid = GetAotId(); if (frame.GetILOffset() != -1 || aotid == null) { filename = string.Format("<{0}>", mvid); } else { filename = string.Format("<{0}#{1}>", mvid, aotid); } } sb.AppendFormat(" in {0}:{1} ", filename, frame.GetFileLineNumber()); } any_frame = true; } return(any_frame); }
bool AddFrames(StringBuilder sb) { bool printOffset; string debugInfo, indentation; string unknown = Locale.GetText("<unknown method>"); indentation = " "; debugInfo = Locale.GetText(" in {0}:{1} "); var newline = String.Format("{0}{1}{2} ", Environment.NewLine, indentation, Locale.GetText("at")); int i; for (i = 0; i < FrameCount; i++) { StackFrame frame = GetFrame(i); if (i == 0) { sb.AppendFormat("{0}{1} ", indentation, Locale.GetText("at")); } else { sb.Append(newline); } if (frame.GetMethod() == null) { string internal_name = frame.GetInternalMethodName(); if (internal_name != null) { sb.Append(internal_name); } else { sb.AppendFormat("<0x{0:x5} + 0x{1:x5}> {2}", frame.GetMethodAddress(), frame.GetNativeOffset(), unknown); } } else { GetFullNameForStackTrace(sb, frame.GetMethod()); if (frame.GetILOffset() == -1) { sb.AppendFormat(" <0x{0:x5} + 0x{1:x5}>", frame.GetMethodAddress(), frame.GetNativeOffset()); if (frame.GetMethodIndex() != 0xffffff) { sb.AppendFormat(" {0}", frame.GetMethodIndex()); } } else { sb.AppendFormat(" [0x{0:x5}]", frame.GetILOffset()); } sb.AppendFormat(debugInfo, frame.GetSecureFileName(), frame.GetFileLineNumber()); } } return(i != 0); }
/// <summary>Builds a readable representation of the stack trace.</summary> /// <returns>A readable representation of the stack trace.</returns> /// <filterpriority>2</filterpriority> public override string ToString() { string value = string.Format("{0} {1} ", Environment.NewLine, Locale.GetText("at")); string text = Locale.GetText("<unknown method>"); string text2 = Locale.GetText(" in {0}:line {1}"); StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < this.FrameCount; i++) { StackFrame frame = this.GetFrame(i); if (i > 0) { stringBuilder.Append(value); } else { stringBuilder.AppendFormat(" {0} ", Locale.GetText("at")); } MethodBase method = frame.GetMethod(); if (method != null) { stringBuilder.AppendFormat("{0}.{1}", method.DeclaringType.FullName, method.Name); stringBuilder.Append("("); ParameterInfo[] parameters = method.GetParameters(); for (int j = 0; j < parameters.Length; j++) { if (j > 0) { stringBuilder.Append(", "); } Type type = parameters[j].ParameterType; bool isByRef = type.IsByRef; if (isByRef) { type = type.GetElementType(); } if (type.IsClass && type.Namespace != string.Empty) { stringBuilder.Append(type.Namespace); stringBuilder.Append("."); } stringBuilder.Append(type.Name); if (isByRef) { stringBuilder.Append(" ByRef"); } stringBuilder.AppendFormat(" {0}", parameters[j].Name); } stringBuilder.Append(")"); } else { stringBuilder.Append(text); } if (this.debug_info) { string secureFileName = frame.GetSecureFileName(); if (secureFileName != "<filename unknown>") { stringBuilder.AppendFormat(text2, secureFileName, frame.GetFileLineNumber()); } } } return(stringBuilder.ToString()); }