Example #1
0
        // A message has been received from the debugger, or it has
        // exited.
        void OnMessage(object sender, EventArgs args)
        {
            Debugger.Message msg;

            while (debug.Output.TryReceive(out msg))
            {
            switch (msg.Type)
            {
            case Debugger.MessageType.Normal:
            case Debugger.MessageType.Debug:
            Console.Out.WriteLine(stripANSI(msg.Text));
            break;

            case Debugger.MessageType.Error:
            Console.Error.WriteLine(stripANSI(msg.Text));
            break;

            case Debugger.MessageType.Shell:
            break;
            }

            if (msg.Type == Debugger.MessageType.Shell)
            HandleShell(msg);
            else if (MessageReceived != null)
            MessageReceived(this, new MessageEventArgs(msg));
            }

            if (debug.Output.IsClosed)
            {
            messageEvent.Disable();
            readyEvent.Disable();
            debug = null;
            messageEvent = null;
            readyEvent = null;

            if (DebuggerExited != null)
            DebuggerExited(this, null);
            }
        }
Example #2
0
        // Start a new debugger process if the debugger is not already
        // running.
        public void Start(string cmdline)
        {
            if (debug != null)
            return;

            string path = settings.MSPDebugPath;
            string args = "--embed " + cmdline;

            if (settings.UseBundledDebugger)
            {
            string self = Assembly.GetExecutingAssembly().Location;

            path = Path.Combine
            (Path.GetDirectoryName(self), "mspdebug.exe");
            }

            isReady = false;
            try {
            debug = new Debugger(path, args);
            }
            catch (Exception ex)
            {
            MessageDialog dlg = new MessageDialog
            (null, DialogFlags.Modal, MessageType.Error,
             ButtonsType.Ok, "Can't start debugger: {0}",
             ex.Message);

            dlg.Title = "Olishell";
            dlg.Run();
            dlg.Hide();
            return;
            }

            messageEvent = new ITC.GtkListener(debug.Output);
            messageEvent.Signalled += OnMessage;

            readyEvent = new ITC.GtkListener(debug.Ready);
            readyEvent.Signalled += OnReady;

            if (DebuggerStarted != null)
            DebuggerStarted(this, null);
        }