Example #1
0
 bool TryGetModuleData(DbgModule module, out DbgModuleData data)
 {
     if (module.TryGetData(out data) && data.Engine == this)
     {
         return(true);
     }
     data = null;
     return(false);
 }
Example #2
0
        void DnDebugger_OnModuleAdded(object sender, ModuleDebuggerEventArgs e)
        {
            Debug.Assert(objectFactory != null);
            if (e.Added)
            {
                e.ShouldPause = true;
                var appDomain    = TryGetEngineAppDomain(e.Module.AppDomain)?.AppDomain;
                var moduleId     = e.Module.DnModuleId.ToModuleId();
                var moduleData   = new DbgModuleData(this, e.Module, moduleId);
                var engineModule = ModuleCreator.CreateModule(this, objectFactory, appDomain, e.Module, moduleData);
                lock (lockObj) {
                    if (!toAssemblyModules.TryGetValue(e.Module.Assembly, out var modules))
                    {
                        toAssemblyModules.Add(e.Module.Assembly, modules = new List <DnModule>());
                    }
                    modules.Add(e.Module);
                    toEngineModule.Add(e.Module.CorModule, engineModule);
                }

                var reflectionModule = ((DbgCorDebugInternalModuleImpl)engineModule.Module.InternalModule).ReflectionModule;
                if (reflectionModule.IsCorLib)
                {
                    var type = reflectionModule.AppDomain.GetWellKnownType(DmdWellKnownType.System_Diagnostics_Debugger_CrossThreadDependencyNotification, isOptional: true);
                    Debug.Assert((object)type != null || dnDebugger.DebuggeeVersion.StartsWith("v2."));
                    if ((object)type != null)
                    {
                        dnDebugger.AddCustomNotificationClassToken(e.Module, (uint)type.MetadataToken);
                    }
                }
            }
            else
            {
                DbgEngineModule engineModule;
                lock (lockObj) {
                    if (toAssemblyModules.TryGetValue(e.Module.Assembly, out var modules))
                    {
                        modules.Remove(e.Module);
                        if (modules.Count == 0)
                        {
                            toAssemblyModules.Remove(e.Module.Assembly);
                        }
                    }
                    toDynamicModuleHelper.Remove(e.Module.CorModule);
                    if (toEngineModule.TryGetValue(e.Module.CorModule, out engineModule))
                    {
                        toEngineModule.Remove(e.Module.CorModule);
                        ((DbgCorDebugInternalModuleImpl)engineModule.Module.InternalModule).Remove();
                    }
                }
                if (engineModule != null)
                {
                    e.ShouldPause = true;
                    engineModule.Remove(GetMessageFlags());
                }
            }
        }
Example #3
0
		bool TryGetModuleData(DbgModule module, out DbgModuleData data) {
			if (module.TryGetData(out data) && data.Engine == this)
				return true;
			data = null;
			return false;
		}