You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.8 KiB
60 lines
1.8 KiB
4 months ago
|
# 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
|