public static NameValuePair ToNameValuePair(this string data)
		{
			var split = data.Split(new[] {'='}, 2);

			var result = new NameValuePair();
			result.Name = split[0];
			result.Value = split[1];

			if (result.Value[0] == '"')
			{
				result.Value = result.Value.RemoveBraces();
			}

			return result;
		}
		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;
		}
		public static LiveBreakPoint FromArgumentList(NameValuePair[] argumentList)
		{
			var result = new LiveBreakPoint();

			foreach (var argument in argumentList)
			{
				switch (argument.Name)
				{
					case "number":
						result.Number = Convert.ToInt32(argument.Value);
						break;

					case "type":
						if (argument.Value == "breakpoint")
						{
							result.Type = BreakPointType.BreakPoint;
						}
						else
						{
							throw new Exception("Breakpoint type not implmented.");
						}
						break;

					case "disp":
						result.Visible = argument.Value == "keep";
						break;

					case "enabled":
						result.Enabled = argument.Value == "y";
						break;

					case "addr":
						if (argument.Value != "<MULTIPLE>")
						{
							result.Address = Convert.ToUInt64(argument.Value.Replace("0x", ""), 16);
						}
						break;

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

					case "file":
						result.File = argument.Value.Replace("\\\\", "\\").NormalizePath();
						break;

					case "fullname":
						result.FullFileName = argument.Value.Replace("\\\\", "\\").NormalizePath();
						break;

					case "line":
						result.Line = Convert.ToUInt32(argument.Value);
						break;

					case "times":
						result.HitCount = Convert.ToInt32(argument.Value);
						break;

					case "original-location":
						result.OriginalLocation = argument.Value;
						break;

					default:
						Console.WriteLine("Unknown field in breakpoint data");
						break;
				}
			}

			return result;
		}