示例#1
0
 public void ThreadStart(Types.SuspendPolicy suspendPolicy, RequestId requestId, ThreadId threadId)
 {
     ThreadReference thread = VirtualMachine.GetMirrorOf(threadId);
     EventRequest request = VirtualMachine.EventRequestManager.GetEventRequest(EventKind.ThreadStart, requestId);
     ThreadEventArgs e = new ThreadEventArgs(VirtualMachine, (SuspendPolicy)suspendPolicy, request, thread);
     VirtualMachine.EventQueue.OnThreadStart(e);
 }
示例#2
0
 public void ClassPrepare(Types.SuspendPolicy suspendPolicy, RequestId requestId, ThreadId threadId, TypeTag typeTag, ReferenceTypeId typeId, string signature, ClassStatus status)
 {
     ThreadReference thread = VirtualMachine.GetMirrorOf(threadId);
     EventRequest request = VirtualMachine.EventRequestManager.GetEventRequest(EventKind.ClassPrepare, requestId);
     ReferenceType type = VirtualMachine.GetMirrorOf(typeTag, typeId);
     ClassPrepareEventArgs e = new ClassPrepareEventArgs(VirtualMachine, (SuspendPolicy)suspendPolicy, request, thread, signature, type);
     VirtualMachine.EventQueue.OnClassPrepare(e);
 }
示例#3
0
            public void Breakpoint(Types.SuspendPolicy suspendPolicy, RequestId requestId, ThreadId threadId, Types.Location location)
            {
                ThreadReference thread = VirtualMachine.GetMirrorOf(threadId);
                EventRequest request = VirtualMachine.EventRequestManager.GetEventRequest(EventKind.Breakpoint, requestId);
                Location loc = VirtualMachine.GetMirrorOf(location);

                ThreadLocationEventArgs e = new ThreadLocationEventArgs(VirtualMachine, (SuspendPolicy)suspendPolicy, request, thread, loc);
                VirtualMachine.EventQueue.OnBreakpoint(e);
            }
示例#4
0
 public void Exception(Types.SuspendPolicy suspendPolicy, RequestId requestId, ThreadId threadId, Types.Location location, TaggedObjectId exception, Types.Location catchLocation)
 {
     EventRequest request = VirtualMachine.EventRequestManager.GetEventRequest(EventKind.Exception, requestId);
     ThreadReference thread = VirtualMachine.GetMirrorOf(threadId);
     Location loc = VirtualMachine.GetMirrorOf(location);
     ObjectReference exceptionReference = VirtualMachine.GetMirrorOf(exception);
     Location catchLoc = VirtualMachine.GetMirrorOf(catchLocation);
     ExceptionEventArgs e = new ExceptionEventArgs(VirtualMachine, (SuspendPolicy)suspendPolicy, request, thread, loc, exceptionReference, catchLoc);
     VirtualMachine.EventQueue.OnException(e);
 }
示例#5
0
        internal StackFrame(VirtualMachine virtualMachine, Types.FrameId frameId, ThreadReference thread, Location location)
            : base(virtualMachine)
        {
            Contract.Requires(virtualMachine != null);
            Contract.Requires <ArgumentNullException>(thread != null, "thread");
            Contract.Requires <ArgumentNullException>(location != null, "location");

            _thread   = thread;
            _frameId  = frameId;
            _location = location;
        }
示例#6
0
        internal StackFrame(VirtualMachine virtualMachine, Types.FrameId frameId, ThreadReference thread, Location location)
            : base(virtualMachine)
        {
            Contract.Requires(virtualMachine != null);
            Contract.Requires<ArgumentNullException>(thread != null, "thread");
            Contract.Requires<ArgumentNullException>(location != null, "location");

            _thread = thread;
            _frameId = frameId;
            _location = location;
        }
示例#7
0
        internal StackFrame GetMirrorOf(ThreadReference thread, FrameLocationData frame)
        {
            Location location = GetMirrorOf(frame.Location);

            return(new StackFrame(this, frame.FrameId, thread, location));
        }
示例#8
0
        public IStrongValueHandle <IValue> InvokeMethod(IThreadReference thread, IMethod method, InvokeOptions options, params IValue[] arguments)
        {
            Types.Value    returnValue;
            TaggedObjectId thrownException;

            if (thread != null || VirtualMachine.GetCanInvokeWithoutThread())
            {
                ThreadId threadId = default(ThreadId);
                if (thread != null)
                {
                    threadId = ((ThreadReference)thread).ThreadId;
                }

                DebugErrorHandler.ThrowOnFailure(VirtualMachine.ProtocolService.InvokeObjectMethod(out returnValue, out thrownException, ObjectId, threadId, (ClassId)((Method)method).DeclaringType.TaggedReferenceTypeId, ((Method)method).MethodId, (Types.InvokeOptions)options, arguments.Cast <Value>().Select(Value.ToNetworkValue).ToArray()));
            }
            else
            {
                returnValue     = default(Types.Value);
                thrownException = default(TaggedObjectId);
                Error errorCode = Error.ThreadNotSuspended;

                foreach (var vmThread in VirtualMachine.GetAllThreads())
                {
                    ThreadReference threadReference = vmThread as ThreadReference;
                    if (threadReference == null)
                    {
                        continue;
                    }

                    ThreadStatus  threadStatus;
                    SuspendStatus suspendStatus;
                    DebugErrorHandler.ThrowOnFailure(VirtualMachine.ProtocolService.GetThreadStatus(out threadStatus, out suspendStatus, threadReference.ThreadId));
                    if (threadStatus != ThreadStatus.Running)
                    {
                        continue;
                    }

                    if (suspendStatus != SuspendStatus.Suspended)
                    {
                        continue;
                    }

                    int suspendCount;
                    DebugErrorHandler.ThrowOnFailure(VirtualMachine.ProtocolService.GetThreadSuspendCount(out suspendCount, threadReference.ThreadId));

                    errorCode = VirtualMachine.ProtocolService.InvokeObjectMethod(out returnValue, out thrownException, ObjectId, threadReference.ThreadId, (ClassId)((Method)method).DeclaringType.TaggedReferenceTypeId, ((Method)method).MethodId, (Types.InvokeOptions)options, arguments.Cast <Value>().Select(Value.ToNetworkValue).ToArray());
                    if (errorCode == Error.InvalidThread)
                    {
                        continue;
                    }

                    break;
                }

                DebugErrorHandler.ThrowOnFailure(errorCode);
            }

            if (thrownException.ObjectId != default(ObjectId))
            {
                throw new InternalException((int)Error.Internal, "An exception was thrown by the invoked method.");
            }

            Value returnValueMirror = VirtualMachine.GetMirrorOf(returnValue);

            if (returnValueMirror == null)
            {
                return(null);
            }

            return(new StrongValueHandle <Value>(VirtualMachine.GetMirrorOf(returnValue)));
        }
示例#9
0
 internal StackFrame GetMirrorOf(ThreadReference thread, FrameLocationData frame)
 {
     Location location = GetMirrorOf(frame.Location);
     return new StackFrame(this, frame.FrameId, thread, location);
 }