Esempio n. 1
0
		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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
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());
        }