# DExTer : Debugging Experience Tester # ~~~~~~ ~ ~~ ~ ~~ # # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. # See https://llvm.org/LICENSE.txt for license information. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception """View tool.""" import os import pickle from dex.heuristic import Heuristic from dex.heuristic.Heuristic import add_heuristic_tool_arguments from dex.tools import ToolBase from dex.utils.Exceptions import Error, HeuristicException from dex.utils.ReturnCode import ReturnCode class Tool(ToolBase): """Given a dextIR file, display the information in a human-readable form. """ @property def name(self): return 'DExTer view' def add_tool_arguments(self, parser, defaults): add_heuristic_tool_arguments(parser) parser.add_argument( 'input_path', metavar='dextIR-file', type=str, default=None, help='dexter dextIR file to view') parser.description = Tool.__doc__ def handle_options(self, defaults): options = self.context.options options.input_path = os.path.abspath(options.input_path) if not os.path.isfile(options.input_path): raise Error('could not find dextIR file "{}"'.format( options.input_path)) def go(self) -> ReturnCode: options = self.context.options with open(options.input_path, 'rb') as fp: steps = pickle.load(fp) try: heuristic = Heuristic(self.context, steps) except HeuristicException as e: raise Error('could not apply heuristic: {}'.format(e)) self.context.o.auto('{}\n\n{}\n\n{}\n\n'.format( heuristic.summary_string, steps, heuristic.verbose_output)) return ReturnCode.OK