【问题标题】:How do I attach a process to the debugger in Visual Studio?如何在 Visual Studio 中将进程附加到调试器?
【发布时间】:2009-06-12 12:49:25
【问题描述】:

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

不是来自代码本身,而只是一种方法?

【问题讨论】:

    标签: .net visual-studio debugging


    【解决方案1】:

    您可以使用Tools | Attach to Process attach to a running process。如果是 Web 应用程序,您可以通过附加到 aspnet_wp.exew3wp.exe 来附加到它。

    回答您关于如何以编程方式附加到进程的问题:

    以下是其他处理该问题的 Stack Overflow 问题:

    【讨论】:

      【解决方案2】:

      在 Visual Studio 中单击工具 |附加到进程。然后选择合适的服务。

      【讨论】:

      • 在更高版本的 Visual Studio 中,它位于 Debug | 下。附加到进程(而不是在工具菜单下)。
      【解决方案3】:

      您几乎可以在任何物超所值的调试器中执行此操作。

      Visual Studio 有一个可以满足您的需求。

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

      【讨论】:

      • 应该使用WinDbg。带有 SOS 的 WinDbg 确实胜过用于 .NET 的 OllyDbg。 OllyDbg 有更多的“分析”功能,但 WinDbg 在这里更合适——OP 可能只想调试自己的进程
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-07
          • 2018-08-04
          • 1970-01-01
          • 2014-08-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多