Exemple #1
0
        void ProcessOutput(string line)
        {
            if (logGdb)
            {
                Console.WriteLine("dbg>: '" + line + "'");
            }
            switch (line [0])
            {
            case '^':
                lock (syncLock) {
                    lastResult = new GdbCommandResult(line);
                    running    = (lastResult.Status == CommandStatus.Running);
                    Monitor.PulseAll(syncLock);
                }
                break;

            case '~':
            case '&':
                if (line.Length > 1 && line[1] == '"')
                {
                    line = line.Substring(2, line.Length - 5);
                }
                ThreadPool.QueueUserWorkItem(delegate {
                    OnTargetOutput(false, line + "\n");
                });
                break;

            case '*':
                GdbEvent ev;
                lock (eventLock) {
                    running = false;
                    ev      = new GdbEvent(line);
                    string ti = ev.GetValue("thread-id");
                    if (ti != null && ti != "all")
                    {
                        currentThread = activeThread = int.Parse(ti);
                    }
                    Monitor.PulseAll(eventLock);
                    if (internalStop)
                    {
                        internalStop = false;
                        return;
                    }
                }
                ThreadPool.QueueUserWorkItem(delegate {
                    try {
                        HandleEvent(ev);
                    } catch (Exception ex) {
                        Console.WriteLine(ex);
                    }
                });
                break;
            }
        }
Exemple #2
0
        void HandleEvent(GdbEvent ev)
        {
            if (ev.Name != "stopped")
            {
                Console.WriteLine("Unknown event: " + ev.Name);
                return;
            }

            CleanTempVariableObjects();

            TargetEventType type;

            switch (ev.Reason)
            {
            case "breakpoint-hit":
                type = TargetEventType.TargetHitBreakpoint;
                if (!CheckBreakpoint(ev.GetInt("bkptno")))
                {
                    RunCommand("-exec-continue");
                    return;
                }
                break;

            case "signal-received":
                if (ev.GetValue("signal-name") == "SIGINT")
                {
                    type = TargetEventType.TargetInterrupted;
                }
                else
                {
                    type = TargetEventType.TargetSignaled;
                }
                break;

            case "exited":
            case "exited-signalled":
            case "exited-normally":
                type = TargetEventType.TargetExited;
                break;

            default:
                type = TargetEventType.TargetStopped;
                break;
            }

            ResultData curFrame = ev.GetObject("frame");

            FireTargetEvent(type, curFrame);
        }
Exemple #3
0
		void ProcessOutput (string line)
		{
			if (logGdb)
				Console.WriteLine ("dbg>: '" + line + "'");
			switch (line [0]) {
				case '^':
					lock (syncLock) {
						lastResult = new GdbCommandResult (line);
						running = (lastResult.Status == CommandStatus.Running);
						Monitor.PulseAll (syncLock);
					}
					break;
					
				case '~':
				case '&':
					if (line.Length > 1 && line[1] == '"')
						line = line.Substring (2, line.Length - 5);
					ThreadPool.QueueUserWorkItem (delegate {
						OnTargetOutput (false, line + "\n");
					});
					break;
					
				case '*':
					GdbEvent ev;
					lock (eventLock) {
						running = false;
						ev = new GdbEvent (line);
						string ti = ev.GetValue ("thread-id");
						if (ti != null && ti != "all")
							currentThread = activeThread = int.Parse (ti);
						Monitor.PulseAll (eventLock);
						if (internalStop) {
							internalStop = false;
							return;
						}
					}
					ThreadPool.QueueUserWorkItem (delegate {
						try {
							HandleEvent (ev);
						} catch (Exception ex) {
							Console.WriteLine (ex);
						}
					});
					break;
			}
		}
Exemple #4
0
		void HandleEvent (GdbEvent ev)
		{
			if (ev.Name != "stopped") {
				Console.WriteLine ("Unknown event: " + ev.Name);
				return;
			}
			
			CleanTempVariableObjects ();
			
			TargetEventType type;
			switch (ev.Reason) {
				case "breakpoint-hit":
					type = TargetEventType.TargetHitBreakpoint;
					if (!CheckBreakpoint (ev.GetInt ("bkptno"))) {
						RunCommand ("-exec-continue");
						return;
					}
					break;
				case "signal-received":
					if (ev.GetValue ("signal-name") == "SIGINT")
						type = TargetEventType.TargetInterrupted;
					else
						type = TargetEventType.TargetSignaled;
					break;
				case "exited":
				case "exited-signalled":
				case "exited-normally":
					type = TargetEventType.TargetExited;
					break;
				default:
					type = TargetEventType.TargetStopped;
					break;
			}
			
			ResultData curFrame = ev.GetObject ("frame");
			FireTargetEvent (type, curFrame);
		}
		protected virtual void ProcessOutput (string line)
		{
			if (logGdb)
				LoggingService.LogInfo ("dbg>: {0}",line);
			switch (line [0]) {
				case '^':
					lock (syncLock) {
						lastResult = new GdbCommandResult (line);
						running = (lastResult.Status == CommandStatus.Running);
						Monitor.PulseAll (syncLock);
					}
					break;
					
				case '~':
				case '&':
					if (line.Length > 1 && line[1] == '"')
						line = line.Substring (2, line.Length - 5);
					Ide.DispatchService.GuiDispatch(delegate {
						OnTargetOutput (false, line + "\n");
					});
					break;
					
				case '*':
					GdbEvent ev;
					lock (eventLock) {
						running = false;
						ev = new GdbEvent (line);
						string ti = ev.GetValueString ("thread-id");
						if (ti != null && ti != "all")
							currentThread = activeThread = int.Parse (ti);
						Monitor.PulseAll (eventLock);
						if (internalStop) {
							internalStop = false;
							return;
						}
					}
					ThreadPool.QueueUserWorkItem (delegate {
						try {
							HandleEvent (ev);
						} catch (Exception ex) {
							LoggingService.LogError("Error while processing gdb output", ex);
						}
					});
					break;
			}
		}