Ejemplo n.º 1
0
        private void AttachToProcess(string processName)
        {
            var       dte       = Package.GetDTE();
            Processes processes = dte.Debugger.LocalProcesses;
            var       process   = processes.Cast <EnvDTE.Process>().Where(proc => proc.Name.Contains(processName));

            if (!process.Any())
            {
                return;
            }

            process.First().Attach();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Attaches a visual studio to this process
        /// </summary>
        public void AttachToVisualStudio()
        {
            Console.WriteLine("Attempting to attach to debugger");
            //// Reference Visual Studio core
            var dte = GetDTE2();

            if (dte == null)
            {
                return;
            }

            // Try loop - Visual Studio may not respond the first time.

            Debug.WriteLine("Debug test");
            int tryCount = 5;

            while (tryCount-- > 0)
            {
                try
                {
                    Processes processes = dte.Debugger.LocalProcesses;
                    foreach (EnvDTE.Process proc in processes.Cast <EnvDTE.Process>())
                    {
                        //Console.WriteLine(proc.Name);
                        if (!proc.Name.Contains("NewModules"))
                        {
                            continue;
                        }
                        if (dte.Debugger.CurrentMode == dbgDebugMode.dbgDesignMode)
                        {
                            proc.Attach();
                        }
                        Console.WriteLine(String.Format
                                              ("Attached to process {0} successfully.", proc.Name));
                        tryCount = 0;
                        break;
                    }
                    break;
                }
                catch (COMException e)
                {
                    Console.WriteLine(e.ToString());
                    System.Threading.Thread.Sleep(1000);
                }
            }
        }