64 lines
1.9 KiB
Python
64 lines
1.9 KiB
Python
|
# 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
|