C# 如何获取上次调试会话期间调试器附加到的进程
我正在尝试编写VisualStudio包,它允许附加到上一次调试会话中选择的进程。基本上,我知道如何附加到流程:C# 如何获取上次调试会话期间调试器附加到的进程,c#,vsx,envdte,vs-extensibility,vspackage,C#,Vsx,Envdte,Vs Extensibility,Vspackage,我正在尝试编写VisualStudio包,它允许附加到上一次调试会话中选择的进程。基本上,我知道如何附加到流程: var dte = GetGlobalService(typeof(DTE)) as DTE2; if (dte != null) { IList<Process2> processes = dte.Debugger.LocalProcesses.Cast<Process2>() .Where(process =
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();
}
}
var dte=GetGlobalService(typeof(dte))作为DTE2;
如果(dte!=null)
{
IList过程=
dte.Debugger.localprocesss.Cast()
.Where(process=>process.Name.IndexOf(“process.exe”,StringComparison.Ordinal)!=-1)
.ToList();
foreach(过程中的var p)
{
p、 附加();
}
}
问题是,如何获得我上次附加的流程?是否存储了有关此的任何信息?如果没有,如何编写有助于我的逻辑?我不知道任何此类信息。 另一种可能有效的方法是向每个服务器添加一个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
}
}
IVsDebuggerEvents
(Microsoft.VisualStudio.Shell.Interop.dll)在调试器更改模式时提供通知,而调试引擎使用IDebugEventCallback2
(Microsoft.VisualStudio.debugger.Interop.dll)发送调试事件。使用这些接口可以收集所需信息
更新:
如何执行此操作的详细示例显示在我编写的github存储库中,该存储库允许将调试器附加到以前调试的进程。我不选择此选项。