コード例 #1
0
 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());
 }
コード例 #2
0
 int ICorDebugManagedCallback.Exception(CorDebugAppDomain pAppDomain, CorDebugThread pThread, CorDebugFrame pFrame, uint nOffset, CorDebugExceptionCallbackType dwEventType, uint dwFlags)
 {
     return(0);
 }
コード例 #3
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());
            }
        }