internal AutomatedAnalysisResult( IEnumerable <Analyzer> executedAnalyzers, AnalyzerExecutionContext executionContext) { _executedAnalyzers = executedAnalyzers; _executionContext = executionContext; }
internal TraceProcessorResult( IEnumerable <Analyzer> executedAnalyzers, AnalyzerExecutionContext executionContext) { _executedAnalyzers = executedAnalyzers; _executionContext = executionContext; }
/// <summary> /// Process a single trace. /// </summary> /// <param name="trace">The trace.</param> /// <returns>The result of processing the trace.</returns> public TraceProcessorResult ProcessTrace(ITrace trace) { List<ProcessAnalyzer> processAnalyzers = new List<ProcessAnalyzer>(); // Run global analyzers, deferring per-process analyzers. AnalyzerExecutionContext executionContext = new AnalyzerExecutionContext(_configuration, trace); foreach (Analyzer analyzer in _analyzers) { if (analyzer is ProcessAnalyzer) { // Defer per-process analyzers. processAnalyzers.Add((ProcessAnalyzer)analyzer); } else { // Execute the analyzer. try { using (new AnalyzerExecutionScope(analyzer)) { analyzer.RunAnalyzer(executionContext, null); } } catch (Exception ex) { AutomatedAnalysisEventSource.Log.Error($"Error while executing analyzer '{analyzer.GetType().FullName}': {ex}"); } } } // Run per-process analyzers. foreach (Process process in executionContext.Trace.Processes) { if (process.ContainsManagedCode) { // Create the process context. ProcessContext processContext = new ProcessContext(executionContext, process); foreach (ProcessAnalyzer analyzer in processAnalyzers) { try { using (new AnalyzerExecutionScope(analyzer)) { analyzer.RunAnalyzer(executionContext, processContext); } } catch (Exception ex) { AutomatedAnalysisEventSource.Log.Error($"Error while executing analyzer '{analyzer.GetType().FullName}': {ex}"); } } } } return new TraceProcessorResult(_analyzers, executionContext); }
public AutomatedAnalysisResult ProcessTrace(ITrace trace, TextWriter textLog) { List <PerProcessAnalyzer> perProcessAnalyzers = new List <PerProcessAnalyzer>(); // Run global analyzers, deferring per-process analyzers. AnalyzerExecutionContext executionContext = new AnalyzerExecutionContext(_configuration, trace, textLog); foreach (Analyzer analyzer in _analyzers) { if (analyzer is PerProcessAnalyzer) { // Defer per-process analyzers. perProcessAnalyzers.Add((PerProcessAnalyzer)analyzer); } else { // Execute the analyzer. try { analyzer.RunAnalyzer(executionContext, null); } catch (Exception ex) { textLog.WriteLine($"Error while executing analyzer '{analyzer.GetType().FullName}': {ex}"); } } } // Run per-process analyzers. foreach (AnalyzerTraceProcess process in executionContext.Trace.Processes) { if (process.ContainsManagedCode) { // Create the process context. ProcessContext processContext = new ProcessContext(executionContext, process); foreach (PerProcessAnalyzer analyzer in perProcessAnalyzers) { try { analyzer.RunAnalyzer(executionContext, processContext); } catch (Exception ex) { textLog.WriteLine($"Error while executing analyzer '{analyzer.GetType().FullName}': {ex}"); } } } } return(new AutomatedAnalysisResult(_analyzers, executionContext)); }
public ProcessContext(AnalyzerExecutionContext executionContext, AnalyzerTraceProcess process) { _executionContext = executionContext; AnalyzerProcess = process; AutomatedAnalysisTraceLog traceLog = executionContext.Trace as AutomatedAnalysisTraceLog; if (traceLog != null) { Process = traceLog.TraceLog.Processes[(ProcessIndex)process.UniqueID]; } Issues = executionContext.Issues[process]; _symbolReader = executionContext.SymbolReader; }
protected override AnalyzerExecutionResult Execute(AnalyzerExecutionContext executionContext) { throw new InvalidOperationException(); }
internal override AnalyzerExecutionResult RunAnalyzer(AnalyzerExecutionContext executionContext, ProcessContext processContext) { return(Execute(executionContext, processContext)); }
/// <summary> /// Called by the platform to analyze a single process. /// </summary> /// <param name="executionContext">The context associated with this execution of the Analyzer.</param> /// <param name="processContext">The process-specific context associated with this execution of the Analyzer.</param> /// <returns>The result of the execution.</returns> protected abstract AnalyzerExecutionResult Execute(AnalyzerExecutionContext executionContext, ProcessContext processContext);