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; } }
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); }
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; } }
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; } }