summaryrefslogtreecommitdiffstats
path: root/debuginfo-tests/dexter/dex/tools/view/Tool.py
diff options
context:
space:
mode:
Diffstat (limited to 'debuginfo-tests/dexter/dex/tools/view/Tool.py')
-rw-r--r--debuginfo-tests/dexter/dex/tools/view/Tool.py59
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
OpenPOWER on IntegriCloud