【问题标题】:How to get processes to which debugger was attached to during last debugging session如何获取在上次调试会话期间附加调试器的进程
【发布时间】:2013-02-25 14:18:23
【问题描述】:

我正在尝试编写 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();
    }
}

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

【问题讨论】:

    标签: c# vsx envdte vs-extensibility vspackage


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我不知道任何此类信息。 一种可能有效的不同方法是为每个服务添加 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
              }
      
          }
      

      【讨论】:

      • 这不是我的选择。
      猜你喜欢
      • 2018-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-30
      • 1970-01-01
      • 1970-01-01
      • 2010-10-07
      • 1970-01-01
      相关资源
      最近更新 更多