/// <summary> /// Finds a module of given MVID in one of the processes being debugged and returns its baseline metadata. /// Shall only be called while in debug mode. /// </summary> public ModuleMetadata TryGetBaselineMetadata(Guid mvid) { return(_baselineMetadata.GetOrAdd(mvid, m => { using (DebuggerComponent.ManagedEditAndContinueService()) { var clrModuleInstance = FindClrModuleInstance(m); if (clrModuleInstance == null) { return default; } var metadata = GetBaselineModuleMetadata(clrModuleInstance); if (metadata == null) { return default; } // hook up a callback on module unload (the call blocks until the message is processed): DkmCustomMessage.Create( Connection: clrModuleInstance.Process.Connection, Process: clrModuleInstance.Process, SourceId: DebuggerService.MessageSourceId, MessageCode: 0, Parameter1: this, Parameter2: clrModuleInstance).SendLower(); return metadata; } })); }
public void GetOrAddNull() { var cache = new DebuggeeModuleMetadataCache(); var mvid = Guid.NewGuid(); Assert.Null(cache.GetOrAdd(mvid, m => { Assert.Equal(mvid, m); return(default); }));