private void SendLoadComplete(AD7Thread thread) { Debug.WriteLine("Sending load complete" + GetHashCode()); AD7ProgramCreateEvent.Send(this); Send(new AD7LoadCompleteEvent(), AD7LoadCompleteEvent.IID, thread); if (_startModule != null) { SendModuleLoaded(_startModule); _startModule = null; } if (_startThread != null) { SendThreadStart(_startThread); _startThread = null; } _processLoadedThread = null; EventHandler <AD7EngineEventArgs> attached = EngineAttached; if (attached != null) { attached(this, new AD7EngineEventArgs(this)); } }
public AD7StackFrame(AD7Engine engine, AD7Thread thread, NodeStackFrame threadContext) { _engine = engine; _thread = thread; _stackFrame = threadContext; _parameters = threadContext.Parameters.ToArray(); _locals = threadContext.Locals.ToArray(); }
// EnumThreads is called by the debugger when it needs to enumerate the threads in the program. public int EnumThreads(out IEnumDebugThreads2 ppEnum) { var threadObjects = new AD7Thread[1]; AD7Thread adThread = _threads.Item2; Debug.Assert(adThread != null); threadObjects[0] = adThread; ppEnum = new AD7ThreadEnum(threadObjects); return(VSConstants.S_OK); }
private void OnThreadCreated(object sender, EventArgs e) { var nodeThread = new NodeThread(_process, _process.Id); var newThread = new AD7Thread(this, nodeThread); _threads = new Tuple <NodeThread, AD7Thread>(nodeThread, newThread); lock (_syncLock) { if (_programCreated) { SendThreadStart(newThread); } else { _startThread = newThread; } } }
private void OnProcessLoaded(object sender, EventArgs e) { lock (_syncLock) { if (_pseudoAttach) { _process.Unregister(); } if (_programCreated) { // we've delviered the program created event, deliver the load complete event SendLoadComplete(_threads.Item2); } else { // we haven't delivered the program created event, wait until we do to deliver the process loaded event. _processLoadedThread = _threads.Item2; } } AttachThreadEvents(_process.Debugger); }
private void SendThreadStart(AD7Thread ad7Thread) { Send(new AD7ThreadCreateEvent(), AD7ThreadCreateEvent.IID, ad7Thread); }
private void OnThreadCreated(object sender, EventArgs e) { var nodeThread = new NodeThread(_process, _process.Id); var newThread = new AD7Thread(this, nodeThread); _threads = new Tuple<NodeThread, AD7Thread>(nodeThread, newThread); lock (_syncLock) { if (_programCreated) { SendThreadStart(newThread); } else { _startThread = newThread; } } }
// EnumThreads is called by the debugger when it needs to enumerate the threads in the program. public int EnumThreads(out IEnumDebugThreads2 ppEnum) { var threadObjects = new AD7Thread[1]; AD7Thread adThread = _threads.Item2; Debug.Assert(adThread != null); threadObjects[0] = adThread; ppEnum = new AD7ThreadEnum(threadObjects); return VSConstants.S_OK; }
private void SendLoadComplete(AD7Thread thread) { Debug.WriteLine("Sending load complete" + GetHashCode()); AD7ProgramCreateEvent.Send(this); Send(new AD7LoadCompleteEvent(), AD7LoadCompleteEvent.IID, thread); if (_startModule != null) { SendModuleLoaded(_startModule); _startModule = null; } if (_startThread != null) { SendThreadStart(_startThread); _startThread = null; } _processLoadedThread = null; EventHandler<AD7EngineEventArgs> attached = EngineAttached; if (attached != null) { attached(this, new AD7EngineEventArgs(this)); } }