public override IEnumerable <AttachProgramOptions> Create(AttachProgramOptionsProviderContext context)
 {
     foreach (var process in DebuggableProcesses.GetProcesses(context.ProcessIds, context.IsValidProcess, context.CancellationToken))
     {
         ProcessModule[] modules;
         try {
             modules = process.Modules.Cast <ProcessModule>().ToArray();
         }
         catch {
             continue;
         }
         var coreclrFilename = FileUtilities.GetNativeDllFilename("coreclr");
         foreach (var module in modules)
         {
             var moduleFilename = module.FileName;
             var dllName        = Path.GetFileName(moduleFilename);
             if (dllName.Equals(coreclrFilename, StringComparison.OrdinalIgnoreCase))
             {
                 foreach (var info in TryGetCoreCLRInfos(process, moduleFilename))
                 {
                     context.CancellationToken.ThrowIfCancellationRequested();
                     yield return(info);
                 }
                 break;
             }
         }
     }
 }
Ejemplo n.º 2
0
        public override IEnumerable <AttachProgramOptions> Create(AttachProgramOptionsProviderContext context)
        {
            var clsid = new Guid("9280188D-0E8E-4867-B30C-7FA83884E8DE");
            var riid  = typeof(DEMH.ICLRMetaHost).GUID;
            var mh    = (DEMH.ICLRMetaHost)NativeMethods.CLRCreateInstance(ref clsid, ref riid);

            foreach (var process in DebuggableProcesses.GetProcesses(context.ProcessIds, context.IsValidProcess, context.CancellationToken))
            {
                int hr = mh.EnumerateLoadedRuntimes(process.Handle, out var iter);
                if (hr >= 0)
                {
                    for (;;)
                    {
                        context.CancellationToken.ThrowIfCancellationRequested();
                        hr = iter.Next(1, out object obj, out uint fetched);
                        if (hr < 0 || fetched == 0)
                        {
                            break;
                        }

                        var  rtInfo   = (DEMH.ICLRRuntimeInfo)obj;
                        uint chBuffer = 0;
                        var  sb       = new StringBuilder(300);
                        hr = rtInfo.GetVersionString(sb, ref chBuffer);
                        sb.EnsureCapacity((int)chBuffer);
                        hr = rtInfo.GetVersionString(sb, ref chBuffer);

                        yield return(new DotNetFrameworkAttachProgramOptions(process.Id, sb.ToString()));
                    }
                }
            }
        }
 public override IEnumerable <AttachProgramOptions> Create(AttachProgramOptionsProviderContext context)
 {
     foreach (var process in DebuggableProcesses.GetProcesses(context.ProcessIds, context.IsValidProcess, context.CancellationToken))
     {
         foreach (var info in TryGetCoreCLRInfos(process))
         {
             context.CancellationToken.ThrowIfCancellationRequested();
             yield return(info);
         }
     }
 }