Как подключить процесс к отладчику в Visual Studio?

18

Я знаю, что могу запустить процесс в коде с Process.Start() . Можно ли также подключить отладчик к этому процессу?

Не из кода per se , а просто для этого?

    
задан Bertvan 12.06.2009 в 14:49
источник

5 ответов

23

Вы можете подключиться к запущенному процессу , используя Tools | Attach to Process . Если это веб-приложение, вы можете подключиться к нему, присоединив к aspnet_wp.exe или w3wp.exe .

Чтобы ответить на ваш вопрос о том, как программно присоединить к процессу:

Вот еще вопросы о переполнении стека, которые касаются этого:

ответ дан George Stocker 12.06.2009 в 14:58
источник
3

В визуальной студии нажмите Инструменты | Присоединитесь к процессу. Затем выберите соответствующий сервис.

    
ответ дан dove 12.06.2009 в 14:53
источник
2

Вы можете сделать это практически в любом отладчике, заслуживающем его соли.

Visual Studio имеет тот, который должен соответствовать вашим потребностям.

Если вам нужно немного более совершенное управление, попробуйте OllyDbg , который является дизассемблером, поэтому вы можете фактически манипулировать своей программой на уровне сборки , Это даст вам полный контроль, но это может быть и перегрузка информации.

    
ответ дан samoz 12.06.2009 в 14:57
источник
  • WinDbg следует использовать. WinDbg с SOS действительно превосходит OllyDbg для .NET. OllyDbg имеет больше возможностей «анализа», но WinDbg здесь более уместен - где OP, вероятно, только хочет отладить собственный процесс –  kizzx2 21.04.2011 в 05:59
1

В Visual Studio 2015 нажмите «Debug & gt; Прикрепите к процессу "в меню. Кроме того, имеется комбинация клавиш Ctrl + Alt + P.

    
ответ дан Samrat Debroy 01.02.2016 в 14:37
источник
1

Вы можете сделать это в своем коде.

public static void Attach(DTE2 dte)
        {
            var processes = dte.Debugger.LocalProcesses;
            foreach (var proc in processes.Cast<EnvDTE.Process>().Where(proc => proc.Name.IndexOf("YourProcess.exe") != -1))
                proc.Attach();
        }

        internal static DTE2 GetCurrent()
        {
            var dte2 = (DTE2)Marshal.GetActiveObject("VisualStudio.DTE.12.0"); // For VisualStudio 2013

            return dte2;
        }

Использование:

Attach(GetCurrent());
    
ответ дан Alpesh 17.05.2017 в 13:01
источник