Beispiel #1
0
 internal AutomatedAnalysisResult(
     IEnumerable <Analyzer> executedAnalyzers,
     AnalyzerExecutionContext executionContext)
 {
     _executedAnalyzers = executedAnalyzers;
     _executionContext  = executionContext;
 }
Beispiel #2
0
 internal TraceProcessorResult(
     IEnumerable <Analyzer> executedAnalyzers,
     AnalyzerExecutionContext executionContext)
 {
     _executedAnalyzers = executedAnalyzers;
     _executionContext  = executionContext;
 }
Beispiel #3
0
        /// <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;
        }
Beispiel #6
0
 protected override AnalyzerExecutionResult Execute(AnalyzerExecutionContext executionContext)
 {
     throw new InvalidOperationException();
 }
Beispiel #7
0
 internal override AnalyzerExecutionResult RunAnalyzer(AnalyzerExecutionContext executionContext, ProcessContext processContext)
 {
     return(Execute(executionContext, processContext));
 }
Beispiel #8
0
 /// <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);