void ModifyCore(DbgModuleBreakpointAndSettings[] settings)
        {
            dbgDispatcherProvider.VerifyAccess();
            var bps = new List <DbgModuleBreakpointAndOldSettings>(settings.Length);

            lock (lockObj) {
                foreach (var info in settings)
                {
                    var bpImpl = info.Breakpoint as DbgModuleBreakpointImpl;
                    Debug.Assert(bpImpl != null);
                    if (bpImpl == null)
                    {
                        continue;
                    }
                    Debug.Assert(breakpoints.Contains(bpImpl));
                    if (!breakpoints.Contains(bpImpl))
                    {
                        continue;
                    }
                    var currentSettings = bpImpl.Settings;
                    if (currentSettings == info.Settings)
                    {
                        continue;
                    }
                    bps.Add(new DbgModuleBreakpointAndOldSettings(bpImpl, currentSettings));
                    bpImpl.WriteSettings(info.Settings);
                }
            }
            if (bps.Count > 0)
            {
                BreakpointsModified?.Invoke(this, new DbgBreakpointsModifiedEventArgs(new ReadOnlyCollection <DbgModuleBreakpointAndOldSettings>(bps)));
            }
        }
		void ModifyCore(DbgCodeBreakpointAndSettings[] settings) {
			dbgDispatcherProvider.VerifyAccess();
			List<DbgCodeBreakpointImpl>? updatedBreakpoints = null;
			var bps = new List<DbgCodeBreakpointAndOldSettings>(settings.Length);
			lock (lockObj) {
				foreach (var info in settings) {
					var bpImpl = info.Breakpoint as DbgCodeBreakpointImpl;
					Debug.Assert(!(bpImpl is null));
					if (bpImpl is null)
						continue;
					Debug.Assert(breakpoints.Contains(bpImpl));
					if (!breakpoints.Contains(bpImpl))
						continue;
					var currentSettings = bpImpl.Settings;
					if (currentSettings == info.Settings)
						continue;
					bps.Add(new DbgCodeBreakpointAndOldSettings(bpImpl, currentSettings));
					if (bpImpl.WriteSettings_DbgThread(info.Settings)) {
						if (updatedBreakpoints is null)
							updatedBreakpoints = new List<DbgCodeBreakpointImpl>(settings.Length);
						updatedBreakpoints.Add(bpImpl);
					}
				}
			}
			if (bps.Count > 0)
				BreakpointsModified?.Invoke(this, new DbgBreakpointsModifiedEventArgs(new ReadOnlyCollection<DbgCodeBreakpointAndOldSettings>(bps)));
			if (!(updatedBreakpoints is null)) {
				foreach (var bp in updatedBreakpoints)
					bp.RaiseBoundBreakpointsMessageChanged_DbgThread();
				BoundBreakpointsMessageChanged?.Invoke(this, new DbgBoundBreakpointsMessageChangedEventArgs(new ReadOnlyCollection<DbgCodeBreakpoint>(updatedBreakpoints.ToArray())));
			}
		}
Пример #3
0
 void DbgCodeBreakpointsService_BreakpointsModified(object sender, DbgBreakpointsModifiedEventArgs e) =>
 BreakpointsModified?.Invoke(this, e);