diff options
Diffstat (limited to 'debuginfo-tests/dexter/dex/tools/view/Tool.py')
-rw-r--r-- | debuginfo-tests/dexter/dex/tools/view/Tool.py | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/debuginfo-tests/dexter/dex/tools/view/Tool.py b/debuginfo-tests/dexter/dex/tools/view/Tool.py new file mode 100644 index 00000000000..ad7d5300035 --- /dev/null +++ b/debuginfo-tests/dexter/dex/tools/view/Tool.py @@ -0,0 +1,59 @@ +# 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 |