0

我正在尝试编写允许附加到先前调试会话中选择的进程的 Visual Studio 包。基本上,我知道如何附加到进程:

var dte = GetGlobalService(typeof(DTE)) as DTE2;
if (dte != null)
{
    IList<Process2> processes =
        dte.Debugger.LocalProcesses.Cast<Process2>()
            .Where(process => process.Name.IndexOf("process.exe", StringComparison.Ordinal) != -1)
            .ToList();
    foreach (var p in processes)
    {
        p.Attach();
    }
}

问题是,如何获取我上次附加的进程?是否存储了有关此的任何信息?如果没有,如何编写对我有帮助的逻辑?

4

2 回答 2

1

IVsDebuggerEvents(Microsoft.VisualStudio.Shell.Interop.dll) 在调试器更改模式时提供通知,而IDebugEventCallback2调试引擎使用 (Microsoft.VisualStudio.Debugger.Interop.dll) 发送调试事件。这些接口的使用将允许收集所需的信息。

更新: 如何做到这一点的详细示例显示在我的 github 存储库中,我在其中编写了Visual Studio 扩展,它允许将调试器附加到以前调试过的进程。

于 2013-04-01T18:45:44.420 回答
0

我不知道有任何此类信息。一种可能可行的不同方法是将 WCF 服务添加到每个进程。该服务将使您既可以启动调试器,也可以检查是否已经启动了调试器。

 public class DebugService : IDebugService
    {
        public void LaunchDebugger()
        {
            //TODO - write some code indicating that this 
            //process was bebugged. e.g. - mark a flag in DB or file
            Debugger.Launch();
        }

        public bool WasDebuggedLastTime()
        {
            //TODO - write code to check if this process was debugged
        }

    }
于 2013-02-25T14:27:58.257 回答