Пример #1
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);
            }
        }
Пример #2
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);
                }
            }
        }