Exemple #1
0
        void AddBreakEvent(BreakEvent be)
        {
            object handle = null;

            try {
                handle = OnInsertBreakEvent(be, be.Enabled);
            } catch (Exception ex) {
                Breakpoint bp = be as Breakpoint;
                if (bp != null)
                {
                    OnDebuggerOutput(false, "Could not set breakpoint at location '" + bp.FileName + ":" + bp.Line + "' (" + ex.Message + ")\n");
                }
                else
                {
                    OnDebuggerOutput(false, "Could not set catchpoint for exception '" + ((Catchpoint)be).ExceptionName + "' (" + ex.Message + ")\n");
                }
                HandleException(ex);
                return;
            }

            lock (breakpoints) {
                SetBreakEventHandle(be, handle);
                Breakpoints.NotifyStatusChanged(be);
            }
        }
Exemple #2
0
        internal protected void NotifySourceFileUnloaded(string fullFilePath)
        {
            List <BreakEvent> toUpdate = new List <BreakEvent> ();

            lock (breakpoints) {
                // Make a copy of the breakpoints table since it can be modified while iterating
                Dictionary <BreakEvent, BreakEventInfo> breakpointsCopy = new Dictionary <BreakEvent, BreakEventInfo> (breakpoints);
                foreach (KeyValuePair <BreakEvent, BreakEventInfo> bps in breakpointsCopy)
                {
                    Breakpoint bp = bps.Key as Breakpoint;
                    if (bp != null && bps.Value.Handle != null)
                    {
                        if (System.IO.Path.GetFullPath(bp.FileName) == fullFilePath)
                        {
                            toUpdate.Add(bp);
                        }
                    }
                }
                foreach (BreakEvent be in toUpdate)
                {
                    SetBreakEventHandle(be, null);
                    Breakpoints.NotifyStatusChanged(be);
                }
            }
        }
Exemple #3
0
 /// <summary>
 /// This method can be used by subclasses to set the validity of a breakpoint.
 /// </summary>
 protected void SetBreakEventStatus(BreakEvent be, bool isValid)
 {
     lock (breakpoints) {
         BreakEventInfo bi;
         if (!breakpoints.TryGetValue(be, out bi))
         {
             bi = new BreakEventInfo(null);
         }
         if (bi.IsValid != isValid)
         {
             bi.IsValid       = isValid;
             breakpoints [be] = bi;
             Breakpoints.NotifyStatusChanged(be);
         }
     }
 }
Exemple #4
0
 void UpdateBreakEvent(BreakEvent be)
 {
     lock (breakpoints) {
         object handle;
         if (GetBreakpointHandle(be, out handle))
         {
             if (handle != null)
             {
                 object newHandle = OnUpdateBreakEvent(handle, be);
                 if (newHandle != handle && (newHandle == null || !newHandle.Equals(handle)))
                 {
                     // Update the handle if it has changed, and notify the status change
                     SetBreakEventHandle(be, newHandle);
                 }
                 Breakpoints.NotifyStatusChanged(be);
             }
             else
             {
                 // Try inserting the breakpoint again
                 try {
                     handle = OnInsertBreakEvent(be, be.Enabled);
                     if (handle != null)
                     {
                         // This time worked
                         SetBreakEventHandle(be, handle);
                         Breakpoints.NotifyStatusChanged(be);
                     }
                 } catch (Exception ex) {
                     Breakpoint bp = be as Breakpoint;
                     if (bp != null)
                     {
                         OnDebuggerOutput(false, "Could not set breakpoint at location '" + bp.FileName + ":" + bp.Line + " (" + ex.Message + ")\n");
                     }
                     else
                     {
                         OnDebuggerOutput(false, "Could not set catchpoint for exception '" + ((Catchpoint)be).ExceptionName + "' (" + ex.Message + ")\n");
                     }
                     HandleException(ex);
                 }
             }
         }
     }
 }
Exemple #5
0
        internal protected void OnTargetEvent(TargetEventArgs args)
        {
            currentProcesses = null;

            if (args.Process != null)
            {
                args.Process.Attach(this);
            }
            if (args.Thread != null)
            {
                args.Thread.Attach(this);
                activeThread = args.Thread;
            }
            if (args.Backtrace != null)
            {
                args.Backtrace.Attach(this);
            }

            switch (args.Type)
            {
            case TargetEventType.ExceptionThrown:
                lock (slock) {
                    isRunning = false;
                }
                if (TargetExceptionThrown != null)
                {
                    TargetExceptionThrown(this, args);
                }
                break;

            case TargetEventType.TargetExited:
                lock (slock) {
                    isRunning = false;
                    started   = false;
                    foreach (BreakEvent bp in Breakpoints)
                    {
                        Breakpoints.NotifyStatusChanged(bp);
                    }
                }
                if (TargetExited != null)
                {
                    TargetExited(this, args);
                }
                break;

            case TargetEventType.TargetHitBreakpoint:
                lock (slock) {
                    isRunning = false;
                }
                if (TargetHitBreakpoint != null)
                {
                    TargetHitBreakpoint(this, args);
                }
                break;

            case TargetEventType.TargetInterrupted:
                lock (slock) {
                    isRunning = false;
                }
                if (TargetInterrupted != null)
                {
                    TargetInterrupted(this, args);
                }
                break;

            case TargetEventType.TargetSignaled:
                lock (slock) {
                    isRunning = false;
                }
                if (TargetSignaled != null)
                {
                    TargetSignaled(this, args);
                }
                break;

            case TargetEventType.TargetStopped:
                lock (slock) {
                    isRunning = false;
                }
                if (TargetStopped != null)
                {
                    TargetStopped(this, args);
                }
                break;

            case TargetEventType.UnhandledException:
                lock (slock) {
                    isRunning = false;
                }
                if (TargetUnhandledException != null)
                {
                    TargetUnhandledException(this, args);
                }
                break;
            }
            if (TargetEvent != null)
            {
                TargetEvent(this, args);
            }
        }