protected override unsafe int OnException2( CorDebugAppDomain pAppDomain, CorDebugThread pThread, CorDebugFrame pFrame, uint nOffset, CorDebugExceptionCallbackType dwEventType, uint dwFlags) { Exception2?.Invoke(this, pAppDomain, pThread, pFrame, nOffset, dwEventType, dwFlags); return(Continue()); }
int ICorDebugManagedCallback.Exception(CorDebugAppDomain pAppDomain, CorDebugThread pThread, CorDebugFrame pFrame, uint nOffset, CorDebugExceptionCallbackType dwEventType, uint dwFlags) { return(0); }
void Step(bool into) { try { if (stepper != null) { //stepper.IsActive ();//no meaning? CorDebugFrame frame = activeThread.ActiveFrame; var reader = frame.Function.Assembly.DebugData; if (reader == null) { RawContinue(into); return; } var met = new MethodSymbols(new MetadataToken(frame.Function.Token)); //Ugliest hack ever if (reader is Mono.Cecil.Mdb.MdbReader) { for (int i = 0; i < 100; i++) { met.Variables.Add(new VariableDefinition(null)); } } reader.Read(met); if (met == null || met.Instructions.Count == 0) { RawContinue(into); return; } // Find the current line var range = new COR_DEBUG_STEP_RANGE(); int currentLine = -1; foreach (var sp in met.Instructions) { if (sp.Offset > frame.IP) { if (currentLine == -1) { currentLine = sp.SequencePoint.StartLine; range.startOffset = frame.IP; range.endOffset = (uint)sp.Offset; } else { if (sp.SequencePoint.StartLine == currentLine) { range.endOffset = (uint)sp.Offset; } else { break; } } } } if (currentLine == -1) { RawContinue(into); return; } stepper.StepRange(into, new[] { range }); ClearEvalStatus(); process.Continue(); } } catch (Exception e) { OnDebuggerOutput(true, e.ToString()); } }