AvalonStudio.Debugging.Frame.FromDataString C# (CSharp) Method

FromDataString() public static method

public static FromDataString ( string data ) : Frame
data string
return Frame
		public static Frame FromDataString(string data)
		{
			var result = new Frame();

			if (data[0] != '{')
			{
				throw new Exception("Object expected to begin with '{'");
			}

			var pairs = data.RemoveBraces().ToNameValuePairs();

			foreach (var pair in pairs)
			{
				switch (pair.Name)
				{
					case "addr":
						result.Address = Convert.ToUInt64(pair.Value.Replace("0x", ""), 16);
						break;

					case "func":
						result.Function = pair.Value;
						break;

					case "args":
						result.Arguments = new List<Variable>();

						var arguments = pair.Value.ToArray();

						foreach (var argument in arguments)
						{
							var newArgument = Variable.FromDataString(argument.RemoveBraces());
							newArgument.IsArgument = true;
							result.Arguments.Add(newArgument);
						}
						break;

					case "file":
						result.File = pair.Value;
						break;

					case "fullname":
						result.FullFileName = pair.Value;
						break;

					case "line":
						if (pair.Value != string.Empty)
						{
							result.Line = Convert.ToInt32(pair.Value);
						}
						break;

					case "level":
						if (pair.Value != string.Empty)
						{
							result.Level = Convert.ToUInt32(pair.Value);
						}
						break;
				}
			}

			return result;
		}
	}

Usage Example

Example #1
0
        public static StopRecord FromArgumentList(NameValuePair[] arguments)
        {
            var result = new StopRecord();

            foreach (var arg in arguments)
            {
                switch (arg.Name)
                {
                case "reason":
                    result.Reason = arg.Value.ToStopReason();
                    break;

                case "frame":
                    result.Frame = Frame.FromDataString(arg.Value);
                    break;

                case "thread-id":
                    result.ThreadId = Convert.ToUInt32(arg.Value);
                    break;

                case "stopped-threads":
                    result.StoppedThreads = arg.Value;
                    break;

                case "bkptno":
                    result.BreakPointNumber = Convert.ToUInt32(arg.Value);
                    break;

                case "disp":
                    result.KeepBreakPoint = arg.Value == "keep";
                    break;

                default:
                    //Console.WriteLine ("Unimplemented stop record field detected.");
                    break;
                }
            }

            return(result);
        }