public static VisualStudioDebugger GetAttached() { if (!System.Diagnostics.Debugger.IsAttached) { return(null); } var context = new STAContext(); var instance = GetFirstOrDefaultDTE(context, x => { // Try multiple time, as DTE might report it is busy var debugger = x.DTE.Debugger; if (debugger.DebuggedProcesses == null) { return(false); } return(debugger.DebuggedProcesses.OfType <EnvDTE.Process>().Any(debuggedProcess => debuggedProcess.ProcessID == System.Diagnostics.Process.GetCurrentProcess().Id)); }); if (instance.DTE == null) { context.Dispose(); return(null); } return(new VisualStudioDebugger(context, instance.DTE, instance.ProcessId)); }
public static VisualStudioDebugger GetByProcess(int processId) { var context = new STAContext(); var instance = GetFirstOrDefaultDTE(context, x => x.ProcessId == processId); if (instance.DTE == null) { context.Dispose(); return(null); } return(new VisualStudioDebugger(context, instance.DTE, instance.ProcessId)); }
public void Dispose() { context.Dispose(); }