.net 如何将进程附加到Visual Studio中的调试器?

.net 如何将进程附加到Visual Studio中的调试器?,.net,visual-studio,debugging,.net,Visual Studio,Debugging,我知道我可以使用process.start()在代码中启动进程。 是否也可以将调试器附加到该进程 不是源于代码本身,而是一种实现方法?在visual studio中单击“工具”|附加到进程。然后选择合适的服务。您可以在几乎任何值得使用的调试器中执行此操作 VisualStudio有一个应该适合您的需要的 如果您需要更高级的控制,请尝试,这是一个反汇编程序,因此您可以在汇编级别实际操作您的程序。这将为您提供完全的控制,但也可能会造成信息过载。您可以使用工具|附加到流程中。如果它是Web应用程序,您

我知道我可以使用
process.start()
在代码中启动进程。 是否也可以将调试器附加到该进程


不是源于代码本身,而是一种实现方法?

在visual studio中单击“工具”|附加到进程。然后选择合适的服务。

您可以在几乎任何值得使用的调试器中执行此操作

VisualStudio有一个应该适合您的需要的

如果您需要更高级的控制,请尝试,这是一个反汇编程序,因此您可以在汇编级别实际操作您的程序。这将为您提供完全的控制,但也可能会造成信息过载。

您可以使用
工具|附加到流程中。如果它是Web应用程序,您可以通过附加到
aspnet_wp.exe
w3wp.exe
来附加到它

要回答有关如何以编程方式附加到流程的问题,请执行以下操作:

下面是处理该问题的其他堆栈溢出问题:


在Visual Studio 2015中,单击菜单中的“调试>附加到进程”。或者,还有一个快捷键Ctrl+Alt+P。

您可以在代码中执行此操作

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;
        }

应使用WinDbg。带SOS的WinDbg确实胜过了.NET的OllyDbg。OllyDbg有更多的“分析”功能,但WinDbg在这里更合适——OP可能只想调试自己的进程
Attach(GetCurrent());