public static void VerifyBreakpointAddedOne(List <BreakpointModel> breakpoints) { if (CurrentSession == null) { return; } List <BreakpointModel> newBreakpointsList = breakpoints.Where(n => !currentBreakpointsList.Any(o => o.Name == n.Name)).ToList(); foreach (BreakpointModel item in newBreakpointsList) { currentBreakpointsList.Add(item); IEventData eventData = new EventData { EventKind = EventKind.BreakpointAdd.ToString(), Detail = item.Name, Namespace = PathNodeModel.GeNamespaceName(item.FunctionName), Type = PathNodeModel.GeTypeName(item.FunctionName), TypeFullPath = "TODO", Method = PathNodeModel.GetMethodName(item.FunctionName), MethodKey = String.Empty, MethodSignature = item.FunctionName, CharStart = item.StartLineText, CharEnd = item.DocumentModel.EndLineText, LineNumber = item.DocumentModel.CurrentLineNumber, LineOfCode = item.DocumentModel.CurrentLine, Created = DateTime.Now }; CurrentSession.Events.Add(eventData); Repository.Save(CurrentSession); } List <BreakpointModel> newBreakpointsListData = breakpoints.Where(n => !dataBreakpointsList.Any(o => o.Name == n.Name)).ToList(); foreach (BreakpointModel item in newBreakpointsListData) { dataBreakpointsList.Add(item); BreakpointData breakpointData = new BreakpointData { BreakpointKind = BreakpointKind.Line.ToString(), Namespace = PathNodeModel.GeNamespaceName(item.FunctionName), Type = PathNodeModel.GeTypeName(item.FunctionName), LineNumber = item.FileLine, LineOfCode = item.DocumentModel.CurrentLine, Origin = BreakpointOrigin.AddedDuringDebug.ToString(), Created = DateTime.Now }; CurrentSession.Breakpoints.Add(breakpointData); Repository.Save(CurrentSession); } }
public static void RegisterAlreadyAddedBreakpoints(List <BreakpointModel> breakpoints) { if (addedBreakpoints) { return; } foreach (BreakpointModel item in breakpoints) { currentBreakpointsList.Add(item); dataBreakpointsList.Add(item); IEventData eventData = new EventData { EventKind = EventKind.BreakpointAdd.ToString(), Detail = item.Name, Namespace = PathNodeModel.GeNamespaceName(item.FunctionName), Type = PathNodeModel.GeTypeName(item.FunctionName), TypeFullPath = "TODO", Method = PathNodeModel.GetMethodName(item.FunctionName), MethodKey = String.Empty, MethodSignature = item.FunctionName, CharStart = item.StartLineText, CharEnd = item.DocumentModel.EndLineText, LineNumber = item.DocumentModel.CurrentLineNumber, LineOfCode = item.DocumentModel.CurrentLine, Created = DateTime.Now }; BreakpointData breakpointData = new BreakpointData { BreakpointKind = BreakpointKind.Line.ToString(), Namespace = PathNodeModel.GeNamespaceName(item.FunctionName), Type = PathNodeModel.GeTypeName(item.FunctionName), LineNumber = item.FileLine, LineOfCode = item.DocumentModel.CurrentLine, Origin = BreakpointOrigin.AddedBeforeDebug.ToString(), Created = DateTime.Now }; CurrentSession.Events.Add(eventData); CurrentSession.Breakpoints.Add(breakpointData); Repository.Save(CurrentSession); addedBreakpoints = true; } }
protected override void ProcessRecord() { BreakType bt = BreakType.Code; switch (ParameterSetName) { case "DataOffset": case "DataExpr": bt = BreakType.Data; break; } BreakpointData bd = new BreakpointData(Offset, bt, Flags, DataAccess, DataSize, 0, MatchThread, Id, PassCount, 0, Command, OffsetExpression); var res = Debugger.AddBreakpoints(bd); WriteObject(res, enumerateCollection:true); }
protected override void ProcessRecord() { var bt = BreakType.Code; switch (ParameterSetName) { case "DataOffset": case "DataExpr": bt = BreakType.Data; break; } var bd = new BreakpointData(Offset, bt, Flags, DataAccess, DataSize, 0, MatchThread, Id, PassCount, 0, Command, OffsetExpression); var res = Debugger.AddBreakpoints(bd); WriteObject(res, true); }
private void WriteBreakpoints() { int maxLineNumber = _breakpoints.Keys.Select(loc => loc.LineNumber).DefaultIfEmpty().Max(); var lineNumbersStream = new MemoryStream((maxLineNumber + 1) * sizeof(int)); var lineNumbersWriter = new BinaryWriter(lineNumbersStream); var stringsStream = new MemoryStream(); var stringsWriter = new BinaryWriter(stringsStream); var stringOffsets = new Dictionary <string, int>(); stringsWriter.Write((int)0); foreach (var s in _breakpoints.Keys.Select(loc => loc.FileName).Distinct()) { stringOffsets[s] = (int)stringsStream.Position; stringsWriter.Write((int)s.Length); foreach (char c in s) { stringsWriter.Write((ushort)c); } stringsWriter.Write((ushort)0); } var fileNamesOffsetsStream = new MemoryStream(); var fileNamesOffsetsWriter = new BinaryWriter(fileNamesOffsetsStream); var fileNamesOffsetsIndices = new Dictionary <int[], int>(new StructuralArrayEqualityComparer <int>()); fileNamesOffsetsWriter.Write((int)0); foreach (var g in _breakpoints.Keys.GroupBy(loc => loc.LineNumber)) { var lineNumber = g.Key; var fileNamesOffsets = g.Select(loc => stringOffsets[loc.FileName]).ToArray(); Array.Sort(fileNamesOffsets); if (!fileNamesOffsetsIndices.TryGetValue(fileNamesOffsets, out global::System.Int32 fileNamesOffsetsIndex)) { fileNamesOffsetsIndex = (int)fileNamesOffsetsStream.Position / sizeof(int); foreach (int offset in fileNamesOffsets) { fileNamesOffsetsWriter.Write(offset); } fileNamesOffsetsWriter.Write((int)0); fileNamesOffsetsIndices.Add(fileNamesOffsets, fileNamesOffsetsIndex); } lineNumbersStream.Position = lineNumber * sizeof(int); lineNumbersWriter.Write(fileNamesOffsetsIndex); } byte breakpointDataInUseByTraceFunc = _breakpointDataInUseByTraceFunc.Read(); byte currentBreakpointData = (breakpointDataInUseByTraceFunc == 0) ? (byte)1 : (byte)0; _currentBreakpointData.Write(currentBreakpointData); CliStructProxy <BreakpointData> bpDataProxy = _breakpointData[currentBreakpointData]; BreakpointData bpData = bpDataProxy.Read(); if (bpData.lineNumbers != 0) { _process.FreeVirtualMemory(bpData.lineNumbers, 0, NativeMethods.MEM_RELEASE); } if (bpData.fileNamesOffsets != 0) { _process.FreeVirtualMemory(bpData.fileNamesOffsets, 0, NativeMethods.MEM_RELEASE); } if (bpData.strings != 0) { _process.FreeVirtualMemory(bpData.strings, 0, NativeMethods.MEM_RELEASE); } bpData.maxLineNumber = maxLineNumber; if (lineNumbersStream.Length > 0) { bpData.lineNumbers = _process.AllocateVirtualMemory(0, (int)lineNumbersStream.Length, NativeMethods.MEM_COMMIT | NativeMethods.MEM_RESERVE, NativeMethods.PAGE_READWRITE); _process.WriteMemory(bpData.lineNumbers, lineNumbersStream.ToArray()); } else { bpData.lineNumbers = 0; } bpData.fileNamesOffsets = _process.AllocateVirtualMemory(0, (int)fileNamesOffsetsStream.Length, NativeMethods.MEM_COMMIT | NativeMethods.MEM_RESERVE, NativeMethods.PAGE_READWRITE); _process.WriteMemory(bpData.fileNamesOffsets, fileNamesOffsetsStream.ToArray()); bpData.strings = _process.AllocateVirtualMemory(0, (int)stringsStream.Length, NativeMethods.MEM_COMMIT | NativeMethods.MEM_RESERVE, NativeMethods.PAGE_READWRITE); _process.WriteMemory(bpData.strings, stringsStream.ToArray()); bpDataProxy.Write(bpData); }
public BreakpointChangedEventArgs(Breakpoint breakpoint, BreakpointState state, BreakpointData breakpointData) : base(breakpoint, state) { BreakpointData = breakpointData; }
public void AddBreakpoint(BreakpointData breakpoint, object breakpointIdentifier) { _iconMargin.AddExistingBreakpoint(breakpointIdentifier, breakpoint.LineNumber, breakpoint.IsEnabled); }