private void Analyze(DumpFileInfo dumpFileInfo)
        {
            int      maxRetryCount        = 5;
            int      retryCount           = 0;
            TimeSpan pauseBetweenAttempts = TimeSpan.FromSeconds(5);
            bool     success = false;

            while (retryCount < maxRetryCount && !success)
            {
                try
                {
                    Logger.PrintTrace($"Attempt {++retryCount}");
                    _defaultAnalysis.DumpFiles.Clear();
                    _defaultAnalysis.AddDumpFile(dumpFileInfo.FilePath);
                    _defaultAnalysis.ReportPath = dumpFileInfo.FilePath + ".mht";
                    _defaultAnalysis.Symbols    = DumpAnalyzerConfig.PublicSymbols;
                    if (!string.IsNullOrEmpty(DumpAnalyzerConfig.RelativeSymbolsDirectory))
                    {
                        _defaultAnalysis.Symbols += $";{GetRelativeSymbolsPath(dumpFileInfo)}";
                    }

                    _dumpAnalyzer.RunAnalysis(_defaultAnalysis);
                    success = true;
                }
                catch (FileLoadException ex)
                {
                    Logger.ReportError($"error with reading the file {ex.FileName} - reetry again in {pauseBetweenAttempts}");
                    Logger.PrintError(ex);

                    Thread.Sleep(pauseBetweenAttempts);
                }
            }
        }
示例#2
0
        static void Main(string[] args)
        {
            _av = new ArgsValidator(args);
            if (!_av.ValidArguments)
            {
                return;
            }
            _analysis = _av.GetAnalysisJob;
            var analyzer = new DumpAnalyzer();

            if (!string.IsNullOrEmpty(_analysis.MonitoredFolder))
            {
                Logger.PrintTrace("--------- Automatic Dump Analyzer ---------");
                Logger.PrintTrace($"Monitoring {_analysis.MonitoredFolder} for dump files");
                var priorites = Enum.GetNames(typeof(DumpPriority)).Length;

                var dumpsCollection = new BlockingCollection <DumpFileInfo>(new ConcurrentPriorityQueue <int, DumpFileInfo>(x => priorites - (int)x.Priority));
                var consumer        = new DumpFileConsumer(dumpsCollection, _analysis);
                var watcher         = new DumpFileWatcher(_analysis.MonitoredFolder, dumpsCollection);

                var cts = new CancellationTokenSource();
                Console.CancelKeyPress += (sender, eventArgs) => cts.Cancel();

                consumer.Start(cts.Token);
            }
            else
            {
                analyzer.RunAnalysis(_analysis);
            }
        }