.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());