public override async Task <List <ulong> > StartAddressesForLine(string file, uint line) { string cmd = "info line " + file + ":" + line; var result = await _debugger.ConsoleCmdAsync(cmd); List <ulong> addresses = new List <ulong>(); using (StringReader stringReader = new StringReader(result)) { while (true) { string resultLine = stringReader.ReadLine(); if (resultLine == null) { break; } int pos = resultLine.IndexOf("starts at address "); if (pos > 0) { ulong address; string addrStr = resultLine.Substring(pos + 18); if (MICommandFactory.SpanNextAddr(addrStr, out address) != null) { addresses.Add(address); } } } } return(addresses); }
private async void OnStopped(Results results) { string reason = results.TryFindString("reason"); if (reason.StartsWith("exited")) { if (this.ProcessState != ProcessState.Exited) { this.ProcessState = ProcessState.Exited; if (ProcessExitEvent != null) { ProcessExitEvent(this, new ResultEventArgs(results)); } } return; } //if this is an exception reported from LLDB, it will not currently contain a frame object in the MI //if we don't have a frame, check if this is an exception and retrieve the frame if (!results.Contains("frame") && (string.Compare(reason, "exception-received", StringComparison.OrdinalIgnoreCase) == 0 || string.Compare(reason, "signal-received", StringComparison.OrdinalIgnoreCase) == 0) ) { //get the info for the current frame Results frameResult = await MICommandFactory.StackInfoFrame(); //add the frame to the stopping results results = results.Add("frame", frameResult.Find("frame")); } bool fIsAsyncBreak = MICommandFactory.IsAsyncBreakSignal(results); if (await DoInternalBreakActions(fIsAsyncBreak)) { return; } this.ProcessState = ProcessState.Stopped; FlushBreakStateData(); if (!results.Contains("frame")) { if (ModuleLoadEvent != null) { ModuleLoadEvent(this, new ResultEventArgs(results)); } } else if (BreakModeEvent != null) { if (fIsAsyncBreak) { _requestingRealAsyncBreak = false; } BreakModeEvent(this, new ResultEventArgs(results)); } }
internal void OnComplete(Results results, MICommandFactory commandFactory) { if (_expectedResultClass != ResultClass.None && _expectedResultClass != results.ResultClass) { string miError = null; if (results.ResultClass == ResultClass.error) { miError = results.FindString("msg"); } _completionSource.SetException(new UnexpectedMIResultException(commandFactory.Name, this.Command, miError)); } else { _completionSource.SetResult(results); } }
public void SendDebuggerAborted(MICommandFactory commandFactory, string lastSentCommandName, /*OPTIONAL*/ string debuggerExitCode) { List<KeyValuePair<string, object>> eventProperties = new List<KeyValuePair<string, object>>(); eventProperties.Add(new KeyValuePair<string, object>(Property_DebuggerName, commandFactory.Name)); eventProperties.Add(new KeyValuePair<string, object>(Property_LastSentCommandName, lastSentCommandName)); if (!string.IsNullOrEmpty(debuggerExitCode)) { eventProperties.Add(new KeyValuePair<string, object>(Property_DebuggerExitCode, debuggerExitCode)); } if (_clrdbgProcessCreateProperties != null) { eventProperties.AddRange(_clrdbgProcessCreateProperties); } HostTelemetry.SendEvent(Event_DebuggerAborted, eventProperties.ToArray()); }
public ExceptionManager(MICommandFactory commandFactory, WorkerThread worker, ISampleEngineCallback callback, /*OPTIONAL*/ string registryRoot) { Debug.Assert(commandFactory != null, "Missing commandFactory"); Debug.Assert(worker != null, "Missing worker"); Debug.Assert(callback != null, "Missing callback"); _commandFactory = commandFactory; _worker = worker; _callback = callback; _categoryMap = ReadDefaultSettings(registryRoot); }
public async Task <Results> CmdTerminate() { await MICommandFactory.Terminate(); return(new Results(ResultClass.done)); }
private void OnNotificationOutput(string cmd) { Results results = null; if ((results = MICommandFactory.IsModuleLoad(cmd)) != null) { if (LibraryLoadEvent != null) { LibraryLoadEvent(this, new ResultEventArgs(results)); } } else if (cmd.StartsWith("breakpoint-modified,", StringComparison.Ordinal)) { results = _miResults.ParseResultList(cmd.Substring(20)); if (BreakChangeEvent != null) { BreakChangeEvent(this, new ResultEventArgs(results)); } } else if (cmd.StartsWith("thread-group-started,", StringComparison.Ordinal)) { results = _miResults.ParseResultList(cmd.Substring("thread-group-started,".Length)); HandleThreadGroupStarted(results); } else if (cmd.StartsWith("thread-group-exited,", StringComparison.Ordinal)) { results = _miResults.ParseResultList(cmd.Substring("thread-group-exited,".Length)); HandleThreadGroupExited(results); } else if (cmd.StartsWith("thread-created,", StringComparison.Ordinal)) { results = _miResults.ParseResultList(cmd.Substring("thread-created,".Length)); ThreadCreatedEvent(this, new ResultEventArgs(results, 0)); } else if (cmd.StartsWith("thread-exited,", StringComparison.Ordinal)) { results = _miResults.ParseResultList(cmd.Substring("thread-exited,".Length)); ThreadExitedEvent(this, new ResultEventArgs(results, 0)); } // NOTE: the message event is an MI Extension from clrdbg, though we could use in it the future for other debuggers else if (cmd.StartsWith("message,", StringComparison.Ordinal)) { results = _miResults.ParseResultList(cmd.Substring("message,".Length)); if (this.MessageEvent != null) { this.MessageEvent(this, new ResultEventArgs(results)); } } else if (cmd.StartsWith("telemetry,", StringComparison.Ordinal)) { results = _miResults.ParseResultList(cmd.Substring("telemetry,".Length)); if (this.TelemetryEvent != null) { this.TelemetryEvent(this, new ResultEventArgs(results)); } } else { // append a newline if the message didn't come with one if (!cmd.EndsWith("\n", StringComparison.Ordinal)) { cmd += "\n"; } OnDebuggeeOutput("=" + cmd); } }
public ExceptionManager(MICommandFactory commandFactory, WorkerThread worker, ISampleEngineCallback callback, /*OPTIONAL*/ HostConfigurationStore configStore) { Debug.Assert(commandFactory != null, "Missing commandFactory"); Debug.Assert(worker != null, "Missing worker"); Debug.Assert(callback != null, "Missing callback"); _commandFactory = commandFactory; _worker = worker; _callback = callback; _categoryMap = ReadDefaultSettings(configStore); }
internal void OnComplete(Results results, MICommandFactory commandFactory) { if (_expectedResultClass != ResultClass.None && _expectedResultClass != results.ResultClass) { string miError = null; if (results.ResultClass == ResultClass.error) { miError = results.FindString("msg"); } _completionSource.SetException(new UnexpectedMIResultException(commandFactory.Name, this.Command, miError)); } else { _completionSource.SetResult(results); } }