# 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