public override TargetClass ForceClassInitialization(Thread thread) { if (class_info != null) { return(class_info); } thread.ThreadServant.DoTargetAccess( delegate(TargetMemoryAccess target) { class_info = ResolveClass(target, false); return(class_info); }); if (class_info != null) { return(class_info); } TargetAddress image = file.MonoImage; TargetAddress klass = thread.CallMethod( file.MonoLanguage.MonoDebuggerInfo.LookupClass, image, 0, 0, Name); return((TargetClass)thread.ThreadServant.DoTargetAccess( delegate(TargetMemoryAccess target) { class_info = MonoClassInfo.ReadClassInfo( file.MonoLanguage, target, klass); return class_info; })); }
public override TargetMethodSignature GetSignature(Thread thread) { if (signature != null) { return(signature); } if (!ContainsGenericParameters) { return(new MonoMethodSignature(return_type, parameter_types)); } if (!thread.CurrentFrame.Language.IsManaged) { throw new TargetException(TargetError.InvalidContext); } TargetAddress addr = (TargetAddress)thread.ThreadServant.DoTargetAccess( delegate(TargetMemoryAccess target) { MonoClassInfo class_info = ResolveClass(target, true); return(class_info.GetMethodAddress(target, token)); }); MonoLanguageBackend mono = klass.File.MonoLanguage; TargetAddress sig = thread.CallMethod( mono.MonoDebuggerInfo.GetMethodSignature, addr, 0); signature = (MonoMethodSignature)thread.ThreadServant.DoTargetAccess( delegate(TargetMemoryAccess target) { return(mono.MetadataHelper.GetMethodSignature(mono, target, sig)); }); return(signature); }
internal TargetObject GetStaticField(Thread thread, TargetFieldInfo field) { if (!thread.CurrentFrame.Language.IsManaged) { throw new TargetException(TargetError.InvalidContext); } TargetAddress data_address = thread.CallMethod( SymbolFile.MonoLanguage.MonoDebuggerInfo.ClassGetStaticFieldData, KlassAddress, 0); return((TargetObject)thread.ThreadServant.DoTargetAccess( delegate(TargetMemoryAccess target) { return GetStaticField(target, field, data_address); })); }
internal override TargetFundamentalObject CreateInstance(Thread thread, object obj) { string str = obj as string; if (str == null) { throw new ArgumentException(); } if (!thread.CurrentFrame.Language.IsManaged) { throw new TargetException(TargetError.InvalidContext); } TargetAddress retval = thread.CallMethod( CreateString, TargetAddress.Null, 0, 0, str); TargetLocation location = new AbsoluteTargetLocation(retval); return(new MonoStringObject(this, location)); }
internal void RemoveMethodLoadHandler(Thread thread, int index) { if (!thread.CurrentFrame.Language.IsManaged) throw new TargetException (TargetError.InvalidContext); thread.CallMethod (info.RemoveBreakpoint, index, 0); method_load_handlers.Remove (index); }
internal int RegisterMethodLoadHandler(Thread thread, MonoFunctionType func, FunctionBreakpointHandle handle) { if (method_load_handlers.Contains (handle.Index)) return handle.Index; if (!thread.CurrentFrame.Language.IsManaged) throw new TargetException (TargetError.InvalidContext); TargetAddress retval = thread.CallMethod ( info.InsertSourceBreakpoint, func.SymbolFile.MonoImage, func.Token, handle.Index, func.DeclaringType.BaseName); MethodLoadedHandler handler = handle.MethodLoaded; if (!retval.IsNull) { thread.ThreadServant.DoTargetAccess ( delegate (TargetMemoryAccess target) { method_from_jit_info ((TargetAccess) target, retval, handler); return null; }); } method_load_handlers.Add (handle.Index, handler); return handle.Index; }
public override TargetObjectObject CreateBoxedObject(Thread thread, TargetObject value) { TargetAddress klass; if ((value is MonoClassObject) && !value.Type.IsByRef) klass = ((MonoClassObject) value).KlassAddress; else if (value is TargetFundamentalObject) { MonoClassType ctype = ((MonoFundamentalType) value.Type).MonoClassType; MonoClassInfo info = (MonoClassInfo) thread.ThreadServant.DoTargetAccess ( delegate (TargetMemoryAccess target) { return ctype.ResolveClass (target, true); }); klass = info.KlassAddress; } else throw new InvalidOperationException (); if (!thread.CurrentFrame.Language.IsManaged) throw new TargetException (TargetError.InvalidContext); TargetAddress boxed = thread.CallMethod (MonoDebuggerInfo.GetBoxedObjectMethod, klass, value); if (boxed.IsNull) return null; return new MonoObjectObject (builtin_types.ObjectType, new AbsoluteTargetLocation (boxed)); }