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); }
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); }
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); }
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); }
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; }
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; }
internal StackFrame GetMirrorOf(ThreadReference thread, FrameLocationData frame) { Location location = GetMirrorOf(frame.Location); return(new StackFrame(this, frame.FrameId, thread, location)); }
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))); }
internal StackFrame GetMirrorOf(ThreadReference thread, FrameLocationData frame) { Location location = GetMirrorOf(frame.Location); return new StackFrame(this, frame.FrameId, thread, location); }