| # 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('<d>could not find dextIR file</> <r>"{}"</>'.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 |