如何在Visual Studio中将进程附加到调试器?

24

我知道可以使用Process.Start()启动一个进程。

那么是否有办法将调试器附加到该进程上呢?

并非直接在代码中实现,但是否有其他方法呢?

6个回答

28

3
在 Visual Studio 中,点击“工具”|“附加到进程”。然后选择适当的服务。

1
在Visual Studio的后续版本中,它位于“调试”|“附加到进程”下(而不是在“工具”菜单下)。 - BornToCode

3

您可以在代码中实现此操作。

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

Marshall.GetActiveObject() 在 .NET Core 中不可用,但您可以使用 https://dev59.com/jL7pa4cB1Zd3GeqPsijy#64826127 作为解决方法。 - Holistic Developer

2
在Visual Studio 2015中,点击菜单中的“调试>附加到进程”。或者使用快捷键Ctrl+Alt+P。

2
你可以在几乎任何值得一试的调试器中完成此操作。
Visual Studio有一个调试器,应该符合你的需求。
如果你需要更高级的控制,可以尝试使用 OllyDbg,它是一个反汇编器,因此你可以实际上在汇编级别操纵你的程序。这将给你完全的控制权,但也可能会带来信息过载。

应该使用WinDbg。对于.NET,带有SOS的WinDbg确实比OllyDbg更胜一筹。OllyDbg具有更多的“分析”功能,但在这里使用WinDbg更为合适——因为OP可能只想调试自己的进程。 - kizzx2

0
我使用 VS 2022,位于调试 | 附加到进程下面(见附图)。 enter image description here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接