示例#1
0
        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));
        }
示例#2
0
        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));
        }
示例#3
0
 public void Dispose()
 {
     context.Dispose();
 }