def process_crashes(self, cycle): """Process and store crashes.""" benchmark_type = benchmark_config.get_config( self.benchmark).get('type') is_bug_benchmark = benchmark_type == 'bug' if not is_bug_benchmark: return [] if not os.listdir(self.crashes_dir): logs.info('No crashes found for cycle %d.', cycle) return [] logs.info('Saving crash files crashes for cycle %d.', cycle) self.save_crash_files(cycle) logs.info('Processing crashes for cycle %d.', cycle) app_binary = coverage_utils.get_coverage_binary(self.benchmark) crash_metadata = run_crashes.do_crashes_run(app_binary, self.crashes_dir) crashes = [] for crash_key in crash_metadata: crash = crash_metadata[crash_key] crashes.append( models.Crash(crash_key=crash_key, crash_testcase=crash.crash_testcase, crash_type=crash.crash_type, crash_address=crash.crash_address, crash_state=crash.crash_state, crash_stacktrace=crash.crash_stacktrace)) return crashes
def run_cov_new_units(self): """Run the coverage binary on new units.""" coverage_binary = coverage_utils.get_coverage_binary(self.benchmark) crashing_units = run_coverage.do_coverage_run( coverage_binary, self.corpus_dir, self.profraw_file_pattern, self.crashes_dir) self.UNIT_BLACKLIST[self.benchmark] = ( self.UNIT_BLACKLIST[self.benchmark].union(set(crashing_units)))
def generate_summary(self, cycle: int, summary_only=True): """Transforms the .profdata file into json form.""" coverage_binary = coverage_utils.get_coverage_binary(self.benchmark) result = coverage_utils.generate_json_summary(coverage_binary, self.profdata_file, self.cov_summary_file, summary_only=summary_only) if result.retcode != 0: if cycle != 0: self.logger.error( 'Coverage summary json file generation failed for ' 'cycle: %d.', cycle) else: self.logger.error( 'Coverage summary json file generation failed in the end.')