Esempio n. 1
0
        private async Task AttachAsync(string filename, int lineNo)
        {
            var           debugger = new PythonDebugger();
            PythonProcess process  = debugger.DebugProcess(Version, DebuggerTestPath + filename, null, async(newproc, newthread) => {
                var breakPoint = newproc.AddBreakpointByFileExtension(lineNo, filename);
                await breakPoint.AddAsync(TimeoutToken());
            });

            _processes.Add(process);

            long?threadAtBreakpoint = null;

            using (var brkHit = new AutoResetEvent(false))
                using (var procExited = new AutoResetEvent(false)) {
                    EventHandler <BreakpointHitEventArgs> breakpointHitHandler = (s, e) => {
                        threadAtBreakpoint = e.Thread.Id;
                        SafeSetEvent(brkHit);
                    };
                    EventHandler <ProcessExitedEventArgs> processExitedHandler = (s, e) => SafeSetEvent(procExited);
                    process.BreakpointHit += breakpointHitHandler;
                    process.ProcessExited += processExitedHandler;

                    try {
                        await process.StartAsync();
                    } catch (Win32Exception ex) {
                        _processes.Remove(process);
                        if (ex.HResult == -2147467259 /*0x80004005*/)
                        {
                            Assert.Inconclusive("Required Python interpreter is not installed");
                        }
                        else
                        {
                            Assert.Fail("Process start failed:\r\n" + ex.ToString());
                        }
                    }

                    var handles = new[] { brkHit, procExited };
                    if (WaitHandle.WaitAny(handles, 25000) != 0)
                    {
                        Assert.Fail("Failed to wait on event");
                    }

                    process.BreakpointHit -= breakpointHitHandler;
                    process.ProcessExited -= processExitedHandler;
                }

            await _evaluator.AttachProcessAsync(process, new MockThreadIdMapper());

            // AttachProcessAsync calls InitializeAsync which sets the active
            // thread by using the DTE (which is null in these tests), so we
            // adjust it to the correct thread where breakpoint was hit.
            if (threadAtBreakpoint != null)
            {
                _evaluator.ChangeActiveThread(threadAtBreakpoint.Value, false);
            }
        }
Esempio n. 2
0
        private void Attach(string filename, int lineNo)
        {
            var           debugger = new PythonDebugger();
            PythonProcess process  = debugger.DebugProcess(Version, DebuggerTestPath + filename, (newproc, newthread) => {
                var breakPoint = newproc.AddBreakPointByFileExtension(lineNo, filename);
                breakPoint.Add();
                _evaluator.AttachProcess(newproc, new MockThreadIdMapper());
            },
                                                           debugOptions: PythonDebugOptions.CreateNoWindow);

            _processes.Add(process);

            using (var brkHit = new AutoResetEvent(false))
                using (var procExited = new AutoResetEvent(false)) {
                    EventHandler <BreakpointHitEventArgs> breakpointHitHandler = (s, e) => brkHit.Set();
                    EventHandler <ProcessExitedEventArgs> processExitedHandler = (s, e) => procExited.Set();
                    process.BreakpointHit += breakpointHitHandler;
                    process.ProcessExited += processExitedHandler;

                    try {
                        process.Start();
                    } catch (Win32Exception ex) {
                        _processes.Remove(process);
#if DEV11_OR_LATER
                        if (ex.HResult == -2147467259 /*0x80004005*/)
                        {
                            Assert.Inconclusive("Required Python interpreter is not installed");
                        }
                        else
#endif
                        {
                            Assert.Fail("Process start failed:\r\n" + ex.ToString());
                        }
                    }

                    var handles = new[] { brkHit, procExited };
                    if (WaitHandle.WaitAny(handles, 25000) != 0)
                    {
                        Assert.Fail("Failed to wait on event");
                    }

                    process.BreakpointHit -= breakpointHitHandler;
                    process.ProcessExited -= processExitedHandler;
                }

            _evaluator.AttachProcess(process, new MockThreadIdMapper());
        }
Esempio n. 3
0
 internal PythonProcess DebugProcess(PythonDebugger debugger, string filename, Func <PythonProcess, PythonThread, Task> onLoaded = null, bool resumeOnProcessLoaded = true, string interpreterOptions = null, PythonDebugOptions debugOptions = PythonDebugOptions.RedirectOutput, string cwd = null, string arguments = "")
 {
     return(debugger.DebugProcess(Version, filename, DebugLog, onLoaded, resumeOnProcessLoaded, interpreterOptions, debugOptions, cwd, arguments));
 }