Beispiel #1
0
 protected override void DoStep(SoftDebuggerCliSession session)
 {
     session.NextLine ();
 }
Beispiel #2
0
 protected override void DoStep(SoftDebuggerCliSession session)
 {
     session.NextInstruction ();
 }
Beispiel #3
0
 protected abstract void DoStep(SoftDebuggerCliSession session);
Beispiel #4
0
 protected override void DoStep(SoftDebuggerCliSession session)
 {
     session.Finish ();
 }
Beispiel #5
0
        public static void InitializeSession()
        {
            Session = new SoftDebuggerCliSession
            {
                Breakpoints = new BreakpointStore(),
            };

            Session.ExceptionHandler = ex =>
            {
                Logger.WriteErrorLine("Internal Error: {0}: {1}", ex.GetType(), ex.Message);
                Logger.WriteErrorLine("{0}", ex.StackTrace);

                var innerEx = ex.InnerException;
                while (innerEx != null)
                {
                    Logger.WriteErrorLine("--> {0}: {1}", innerEx.GetType(), innerEx.Message);
                    Logger.WriteErrorLine("{0}", innerEx.StackTrace);

                    innerEx = innerEx.InnerException;
                }

                return true;
            };

            Session.LogWriter = (isStdErr, text) =>
            {
                if (!Configuration.MonoDebugLog)
                    return;

                var str = string.Format("[Mono] {0}", text);

                // The strings we get already have a line feed.
                if (isStdErr)
                    Logger.WriteError(str);
                else
                    Logger.WriteDebug(str);
            };

            Session.OutputWriter = (isStdErr, text) =>
            {
                if (isStdErr)
                    Console.Error.Write(text);
                else
                    Console.Write(text);
            };

            Session.TargetUnhandledException += (sender, e) => ExceptionHandler(sender, e, false);

            Session.TargetExceptionThrown += (sender, e) =>
            {
                if (CatchFirstChanceExceptions)
                    ExceptionHandler(sender, e, true);
            };

            Session.TargetHitBreakpoint += (sender, e) =>
            {
                _isPaused = true;
                SetBacktrace(e.Backtrace);

                var bp = (Breakpoint)e.BreakEvent;
                Logger.WriteEmphasisLine("Breakpoint hit: {0}:{1}", bp.FileName, bp.Line);

                if (CommandLine.Suspended)
                    CommandLine.ResumeEvent.Set();
            };

            Session.TargetInterrupted += (sender, e) =>
            {
                _isPaused = true;
                SetBacktrace(e.Backtrace);

                Logger.WriteEmphasisLine("Process interrupted.");

                if (CommandLine.Suspended)
                    CommandLine.ResumeEvent.Set();
            };

            Session.TargetExited += (sender, e) =>
            {
                Stop();

                Logger.WriteEmphasisLine("Process exited.");

                if (CommandLine.Suspended)
                    CommandLine.ResumeEvent.Set();
            };

            Session.TargetEvent += (sender, e) =>
            {
                Logger.WriteDebugLine("Event: {0}", e.Type);
            };
        }