Exemple #1
0
        public AD7StackFrame(AD7Engine engine, AD7Thread thread, JStackFrame threadContext)
        {
            _engine = engine;
            _thread = thread;
            _stackFrame = threadContext;

            _parameters = threadContext.Parameters.ToArray();
            _locals = threadContext.Locals.ToArray();
        }
Exemple #2
0
        // EnumThreads is called by the debugger when it needs to enumerate the threads in the program.
        public int EnumThreads(out IEnumDebugThreads2 ppEnum)
        {
            AssertMainThread();

            AD7Thread[] threadObjects = new AD7Thread[_threads.Count];
            int i = 0;
            foreach (var keyValue in _threads) {
                var thread = keyValue.Key;
                var adThread = keyValue.Value;

                Debug.Assert(adThread != null);
                threadObjects[i++] = adThread;
            }

            ppEnum = new AD7ThreadEnum(threadObjects);

            return VSConstants.S_OK;
        }
Exemple #3
0
 private void SendThreadStart(AD7Thread ad7Thread)
 {
     Send(new AD7ThreadCreateEvent(), AD7ThreadCreateEvent.IID, ad7Thread);
 }
Exemple #4
0
        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;
            _loadComplete.Set();

            var attached = EngineAttached;
            if (attached != null) {
                attached(this, new AD7EngineEventArgs(this));
            }
        }
Exemple #5
0
        private void OnThreadCreated(object sender, ThreadEventArgs e)
        {
            Debug.WriteLine("Thread created:  " + e.Thread.Id);
            var newThread = new AD7Thread(this, e.Thread);
            _threads.Add(e.Thread, newThread);

            lock (_syncLock) {
                if (_programCreated) {
                    SendThreadStart(newThread);
                } else {
                    _startThread = newThread;
                }
            }
        }
Exemple #6
0
        private void OnProcessLoaded(object sender, ThreadEventArgs e)
        {
            lock (_syncLock) {
                if (_pseudoAttach) {
                    _process.Unregister();
                }

                if (_programCreated) {
                    // we've delviered the program created event, deliver the load complete event
                    SendLoadComplete(_threads[e.Thread]);
                } else {
                    Debug.WriteLine("Delaying load complete " + GetHashCode() + " on thread " + _threads[e.Thread].GetDebuggedThread().Id);
                    // we haven't delivered the program created event, wait until we do to deliver the process loaded event.
                    _processLoadedThread = _threads[e.Thread];
                }
            }
        }
Exemple #7
0
        private void OnDebuggerOutput(object sender, OutputEventArgs e)
        {
            AD7Thread thread;
            if (!_threads.TryGetValue(e.Thread, out thread)) {
                _threads[e.Thread] = thread = new AD7Thread(this, e.Thread);
            }

            Send(new AD7DebugOutputStringEvent2(e.Output), AD7DebugOutputStringEvent2.IID, thread);
        }
Exemple #8
0
 private void OnAsyncBreakComplete(object sender, ThreadEventArgs e)
 {
     AD7Thread thread;
     if (!_threads.TryGetValue(e.Thread, out thread)) {
         _threads[e.Thread] = thread = new AD7Thread(this, e.Thread);
     }
     Send(new AD7AsyncBreakCompleteEvent(), AD7AsyncBreakCompleteEvent.IID, thread);
 }