public string ToString(IDebuggerValue value) { return(debugger.Dispatcher.UI(() => { using (var eval = debugger.CreateEvalUI(this)) return eval.ToString(value); })); }
public IDebuggerValue Box(IDebuggerValue value) => debugger.Dispatcher.UI(() => { var valueTmp = (DebuggerValue)value; if (valueTmp.CorValue.IsGeneric) { var et = valueTmp.CorValue.ExactType; if (et != null && et.IsPrimitiveValueType) { var type = GetPrimitiveType((CorElementType)et.ElementType); Debug.Assert(type != null); if (type != null) { value = CreateNoConstructorUI(type); value.DereferencedValue.BoxedValue.Write(valueTmp.Read()); return(value); } } } var boxedValue = eval.Box(((DebuggerValue)value).CorValue); if (boxedValue == null) { throw new ScriptException("Could not box the value"); } return(new DebuggerValue(debugger, boxedValue)); });
public string ToString(IDebuggerValue value) => debugger.Dispatcher.UI(() => { var valueTmp = (DebuggerValue)value; var et = valueTmp.CorValue.ExactType; if (et != null && et.IsPrimitiveValueType) { valueTmp = (DebuggerValue)Box(valueTmp); } var v = valueTmp.CorValue; var objType = ((DebuggerType)appDomain.Object).CorType; var info = objType.GetToStringMethod(); Debug.Assert(info != null); if (info == null) { return(null); } var toStringFunc = objType.Class?.Module?.GetFunctionFromToken(info.Token); if (toStringFunc == null) { return(null); } if (v.IsReference && v.ElementType == dndbg.COM.CorDebug.CorElementType.ByRef) { v = v.NeuterCheckDereferencedValue; } if (v != null && v.IsGeneric && !v.IsHeap && v.ExactType.IsValueType) { Keep(v = eval.Box(v)); } if (v == null) { return(null); } int hr; var res = eval.Call(toStringFunc, null, new DBG.CorValue[1] { v }, out hr); if (res == null || res.Value.WasException) { return(null); } var rv = res.Value.ResultOrException; if (rv == null || rv.IsNull) { return(null); } if (rv != null && rv.IsReference) { rv = rv.NeuterCheckDereferencedValue; } if (rv == null || !rv.IsString || rv.IsNull) { return(null); } return(rv.String); });
public bool GetNullableValue(out IDebuggerValue value) { IDebuggerValue valueTmp = null; bool res = debugger.Dispatcher.UI(() => { CorValue corValue; bool res2 = this.CorValue.GetNullableValue(out corValue); valueTmp = corValue == null ? null : new DebuggerValue(debugger, corValue); return(res2); }); value = valueTmp; return(res); }
public IDebuggerValue Box(IDebuggerValue value) => debugger.Dispatcher.UI(() => { var valueTmp = (DebuggerValue)value; if (valueTmp.CorValue.IsGeneric) { var et = valueTmp.CorValue.ExactType; if (et != null && et.IsPrimitiveValueType) { var type = GetPrimitiveType((CorElementType)et.ElementType); Debug.Assert(type != null); if (type != null) { value = CreateNoConstructorUI(type); value.DereferencedValue.BoxedValue.Write(valueTmp.Read()); return value; } } } var boxedValue = eval.Box(((DebuggerValue)value).CorValue); if (boxedValue == null) throw new ScriptException("Could not box the value"); return new DebuggerValue(debugger, boxedValue); });
/// <summary> /// ToString() /// </summary> /// <param name="value">Owner <see cref="IDebuggerValue"/> instance</param> /// <param name="flags">Flags</param> /// <returns></returns> public string ToString(IDebuggerValue value, TypeFormatFlags flags) { return(value.ToString(this, flags)); }
/// <summary> /// Write this to <paramref name="output"/> /// </summary> /// <param name="output">Destination</param> /// <param name="value">Owner <see cref="IDebuggerValue"/> instance</param> /// <param name="flags">Flags</param> public void Write(ISyntaxHighlightOutput output, IDebuggerValue value, TypeFormatFlags flags) { value.Write(output, this, flags); }
public bool GetNullableValue(out IDebuggerValue value) { IDebuggerValue valueTmp = null; bool res = debugger.Dispatcher.UI(() => { CorValue corValue; bool res2 = CorValue.GetNullableValue(out corValue); valueTmp = corValue == null ? null : new DebuggerValue(debugger, corValue); return res2; }); value = valueTmp; return res; }
public string ToString(IDebuggerValue value) { return debugger.Dispatcher.UI(() => { using (var eval = debugger.CreateEvalUI(this)) return eval.ToString(value); }); }
/// <summary> /// ToString() /// </summary> /// <param name="value">Owner <see cref="IDebuggerValue"/> instance</param> /// <param name="flags">Flags</param> /// <returns></returns> public string ToString(IDebuggerValue value, TypeFormatFlags flags = TypeFormatFlags.Default) => value.ToString(this, flags);
/// <summary> /// Write this to <paramref name="output"/> /// </summary> /// <param name="output">Destination</param> /// <param name="value">Owner <see cref="IDebuggerValue"/> instance</param> /// <param name="flags">Flags</param> public void Write(IOutputWriter output, IDebuggerValue value, TypeFormatFlags flags = TypeFormatFlags.Default) => value.Write(output, this, flags);
public string ToString(IDebuggerValue value) { return debugger.Dispatcher.UI(() => { var valueTmp = (DebuggerValue)value; var et = valueTmp.CorValue.ExactType; if (et != null && et.IsPrimitiveValueType) valueTmp = (DebuggerValue)Box(valueTmp); var v = valueTmp.CorValue; var objType = ((DebuggerType)appDomain.Object).CorType; var info = objType.GetToStringMethod(); Debug.Assert(info != null); if (info == null) return null; var objCls = objType.Class; var corLibMod = objCls == null ? null : objCls.Module; var toStringFunc = corLibMod == null ? null : corLibMod.GetFunctionFromToken(info.Token); if (toStringFunc == null) return null; if (v.IsReference && v.Type == dndbg.COM.CorDebug.CorElementType.ByRef) v = v.NeuterCheckDereferencedValue; if (v != null && v.IsGeneric && !v.IsHeap && v.ExactType.IsValueType) Keep(v = eval.Box(v)); if (v == null) return null; int hr; var res = eval.Call(toStringFunc, null, new DBG.CorValue[1] { v }, out hr); if (res == null || res.Value.WasException) return null; var rv = res.Value.ResultOrException; if (rv == null || rv.IsNull) return null; if (rv != null && rv.IsReference) rv = rv.NeuterCheckDereferencedValue; if (rv == null || !rv.IsString || rv.IsNull) return null; return rv.String; }); }