コード例 #1
0
ファイル: BreakpointsVM.cs プロジェクト: nakijun/dnSpy
		void RemoveBreakpoint(Breakpoint bp) {
			for (int i = 0; i < Collection.Count; i++) {
				var vm = Collection[i];
				if (Collection[i].Breakpoint == bp) {
					Collection.RemoveAt(i);
					vm.Dispose();
					return;
				}
			}
			Debug.Fail("Breakpoint got removed but it wasn't in BreakpointsVM's list");
		}
コード例 #2
0
		void InitializeDebuggerBreakpoint(Breakpoint bp) {
			var debugger = theDebugger.Debugger;
			if (debugger == null || theDebugger.ProcessState == DebuggerProcessState.Terminated)
				return;

			switch (bp.Kind) {
			case BreakpointKind.ILCode:
				var ilbp = (ILCodeBreakpoint)bp;
				Func<ILCodeBreakpointConditionContext, bool> cond = null;//TODO: Let user pick what cond to use
				Debug.Assert(ilbp.DnBreakpoint == null);
				ilbp.DnBreakpoint = debugger.CreateBreakpoint(ilbp.MethodToken.Module.ToDnModuleId(), ilbp.MethodToken.Token, ilbp.ILOffset, cond);
				break;

			case BreakpointKind.DebugEvent:
				//TODO:
				break;

			default:
				throw new InvalidOperationException();
			}
		}
コード例 #3
0
		public Breakpoint[] GetBreakpoints() {
			var bps = new Breakpoint[ilCodeBreakpoints.Count + eventBreakpoints.Count];
			int i = 0;
			foreach (var bp in ilCodeBreakpoints)
				bps[i++] = bp;
			foreach (var bp in eventBreakpoints)
				bps[i++] = bp;
			return bps;
		}
コード例 #4
0
ファイル: BreakpointsVM.cs プロジェクト: nakijun/dnSpy
		void AddBreakpoint(Breakpoint bp) {
			Collection.Add(new BreakpointVM(bp));
		}
コード例 #5
0
ファイル: BreakpointsVM.cs プロジェクト: n017/dnSpy
 void AddBreakpoint(Breakpoint bp)
 {
     Collection.Add(new BreakpointVM(this, breakpointContext, bp));
 }
コード例 #6
0
		public BreakpointsRemovedEventArgs(Breakpoint breakpoint)
			: base(breakpoint) {
		}
コード例 #7
0
		protected BreakpointsEventArgs(Breakpoint[] breakpoints) {
			if (breakpoints == null)
				throw new ArgumentNullException(nameof(breakpoints));
			Breakpoints = breakpoints;
		}
コード例 #8
0
		public void Remove(Breakpoint bp) {
			var ilbp = bp as ILCodeBreakpoint;
			if (ilbp != null) {
				bool b = ilCodeBreakpoints.Remove(ilbp);
				Debug.Assert(b);
				if (b) {
					UninitializeDebuggerBreakpoint(bp);
					BreakpointsRemoved?.Invoke(this, new BreakpointsRemovedEventArgs(bp));
				}
				return;
			}

			var debp = bp as DebugEventBreakpoint;
			if (debp != null) {
				bool b = eventBreakpoints.Remove(debp);
				Debug.Assert(b);
				if (b) {
					UninitializeDebuggerBreakpoint(bp);
					BreakpointsRemoved?.Invoke(this, new BreakpointsRemovedEventArgs(bp));
				}
				return;
			}
		}
コード例 #9
0
ファイル: BreakpointManager.cs プロジェクト: nakijun/dnSpy
		public void Add(Breakpoint bp) {
			var ilbp = bp as ILCodeBreakpoint;
			if (ilbp != null) {
				TextLineObjectManager.Instance.Add(ilbp);
				return;
			}

			var debp = bp as DebugEventBreakpoint;
			if (debp != null) {
				otherBreakpoints.Add(debp);
				BreakPointAddedRemoved(debp, true);
				return;
			}
		}
コード例 #10
0
ファイル: BreakpointVM.cs プロジェクト: manojdjoshi/dnSpy
		public BreakpointVM(BreakpointsVM owner, IBreakpointContext context, Breakpoint bp) {
			this.owner = owner;
			Context = context;
			Breakpoint = bp;
			bp.PropertyChanged += Breakpoint_PropertyChanged;
		}
コード例 #11
0
 void AddBreakpoint(Breakpoint bp) => Collection.Add(new BreakpointVM(this, breakpointContext, bp));
コード例 #12
0
 public static object GetTag(Breakpoint bp) => bp;
コード例 #13
0
ファイル: BreakpointVM.cs プロジェクト: xornand/dnSpy
 public BreakpointVM(BreakpointsVM owner, Breakpoint bp)
 {
     this.owner          = owner;
     this.bp             = bp;
     bp.PropertyChanged += Breakpoint_PropertyChanged;
 }
コード例 #14
0
		void UninitializeDebuggerBreakpoint(Breakpoint bp) {
			var dnbp = bp.DnBreakpoint;
			bp.DnBreakpoint = null;
			if (dnbp != null) {
				var dbg = theDebugger.Debugger;
				if (dbg != null)
					dbg.RemoveBreakpoint(dnbp);
			}
		}
コード例 #15
0
ファイル: BreakpointVM.cs プロジェクト: arkanoid1/dnSpy
		public BreakpointVM(BreakpointsVM owner, Breakpoint bp) {
			this.owner = owner;
			this.bp = bp;
			bp.PropertyChanged += Breakpoint_PropertyChanged;
		}
コード例 #16
0
		public void Add(Breakpoint bp) {
			if (!breakpointListenersInitialized) {
				breakpointListenersInitialized = true;
				foreach (var lazy in breakpointListeners) {
					var b = lazy.Value;
				}
			}

			var ilbp = bp as ILCodeBreakpoint;
			if (ilbp != null) {
				bool b = ilCodeBreakpoints.Add(ilbp);
				Debug.Assert(b);
				if (b) {
					InitializeDebuggerBreakpoint(bp);
					BreakpointsAdded?.Invoke(this, new BreakpointsAddedEventArgs(bp));
				}
				return;
			}

			var debp = bp as DebugEventBreakpoint;
			if (debp != null) {
				bool b = eventBreakpoints.Add(debp);
				Debug.Assert(b);
				if (b) {
					InitializeDebuggerBreakpoint(bp);
					BreakpointsAdded?.Invoke(this, new BreakpointsAddedEventArgs(bp));
				}
				return;
			}
		}
コード例 #17
0
ファイル: BreakpointManager.cs プロジェクト: n017/dnSpy
        public void Remove(Breakpoint bp)
        {
            var ilbp = bp as ILCodeBreakpoint;
            if (ilbp != null) {
                textLineObjectManager.Remove(ilbp);
                return;
            }

            var debp = bp as DebugEventBreakpoint;
            if (debp != null) {
                otherBreakpoints.Remove(debp);
                BreakPointAddedRemoved(debp, false);
                return;
            }
        }
コード例 #18
0
		protected BreakpointsEventArgs(Breakpoint breakpoint) {
			if (breakpoint == null)
				throw new ArgumentNullException(nameof(breakpoint));
			Breakpoints = new[] { breakpoint };
		}
コード例 #19
0
ファイル: BreakpointManager.cs プロジェクト: n017/dnSpy
 void BreakPointAddedRemoved(Breakpoint bp, bool added)
 {
     if (bp == null)
         return;
     if (added) {
         InitializeDebuggerBreakpoint(bp);
         if (OnListModified != null)
             OnListModified(this, new BreakpointListModifiedEventArgs(bp, true));
     }
     else {
         UninitializeDebuggerBreakpoint(bp);
         if (OnListModified != null)
             OnListModified(this, new BreakpointListModifiedEventArgs(bp, false));
     }
 }
コード例 #20
0
		public BreakpointsAddedEventArgs(Breakpoint breakpoint)
			: base(breakpoint) {
		}
コード例 #21
0
ファイル: BreakpointManager.cs プロジェクト: n017/dnSpy
        void InitializeDebuggerBreakpoint(Breakpoint bp)
        {
            var debugger = theDebugger.Debugger;
            if (debugger == null || theDebugger.ProcessState == DebuggerProcessState.Terminated)
                return;

            IBreakpointCondition cond;
            switch (bp.Type) {
            case BreakpointType.ILCode:
                var ilbp = (ILCodeBreakpoint)bp;
                cond = AlwaysBreakpointCondition.Instance;//TODO: Let user pick what cond to use
                Debug.Assert(ilbp.DnBreakpoint == null);
                ilbp.DnBreakpoint = debugger.CreateBreakpoint(ilbp.SerializedDnToken.Module, ilbp.SerializedDnToken.Token, ilbp.ILOffset, cond);
                break;

            case BreakpointType.DebugEvent:
                //TODO:
                break;

            default:
                throw new InvalidOperationException();
            }
        }
コード例 #22
0
		public BreakpointsRemovedEventArgs(Breakpoint[] breakpoints)
			: base(breakpoints) {
		}
コード例 #23
0
ファイル: BreakpointManager.cs プロジェクト: n017/dnSpy
 public BreakpointListModifiedEventArgs(Breakpoint bp, bool added)
 {
     this.Breakpoint = bp;
     this.Added = added;
 }
コード例 #24
0
		public static object GetTag(Breakpoint bp) => bp;
コード例 #25
0
ファイル: BreakpointVM.cs プロジェクト: nakijun/dnSpy
		public BreakpointVM(Breakpoint bp) {
			this.bp = bp;
			bp.PropertyChanged += Breakpoint_PropertyChanged;
		}