Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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;
            }
        }
Exemplo n.º 3
0
		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);
		}
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
 public BreakpointChangedEventArgs(Breakpoint breakpoint, BreakpointState state, BreakpointData breakpointData)
     : base(breakpoint, state)
 {
     BreakpointData = breakpointData;
 }
Exemplo n.º 7
0
		public BreakpointChangedEventArgs(Breakpoint breakpoint, BreakpointState state, BreakpointData breakpointData)
			: base(breakpoint, state)
		{
			BreakpointData = breakpointData;
		}
Exemplo n.º 8
0
		public void AddBreakpoint(BreakpointData breakpoint, object breakpointIdentifier)
		{
			_iconMargin.AddExistingBreakpoint(breakpointIdentifier, breakpoint.LineNumber, breakpoint.IsEnabled);
		}