1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
using System;
using Mono.Debugger.Backend;
namespace Mono.Debugger.Languages
{
public abstract class TargetObject : DebuggerMarshalByRefObject
{
internal readonly TargetLocation Location;
protected TargetType type;
string type_name;
internal TargetObject (TargetType type, TargetLocation location)
{
this.type = type;
this.Location = location;
this.type_name = type.Name;
}
public TargetType Type {
get {
return type;
}
}
public string TypeName {
get {
return type_name;
}
}
internal void SetTypeName (string type_name)
{
this.type_name = type_name;
}
public TargetObjectKind Kind {
get {
return type.Kind;
}
}
public bool HasAddress {
get { return Location.HasAddress; }
}
public TargetAddress GetAddress (Thread thread)
{
if (!Location.HasAddress)
throw new InvalidOperationException ();
return (TargetAddress) thread.ThreadServant.DoTargetAccess (
delegate (TargetMemoryAccess target) {
return Location.GetAddress (target);
});
}
internal TargetAddress GetAddress (TargetMemoryAccess target)
{
if (!Location.HasAddress)
throw new InvalidOperationException ();
return Location.GetAddress (target);
}
internal abstract long GetDynamicSize (TargetMemoryAccess target, TargetBlob blob,
TargetLocation location,
out TargetLocation dynamic_location);
public string Print (Thread thread)
{
return (string) thread.ThreadServant.DoTargetAccess (
delegate (TargetMemoryAccess memory) {
return Print (memory);
});
}
internal virtual string Print (TargetMemoryAccess memory)
{
return ToString ();
}
public override string ToString ()
{
return String.Format ("{0} [{1}]", GetType (), Type);
}
}
}
|