# 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
"""Abstract Base class for controlling debuggers."""
import abc
class DebuggerControllerBase(object, metaclass=abc.ABCMeta):
def __init__(self, context, step_collection):
self.context = context
self.step_collection = step_collection
@abc.abstractclassmethod
def _run_debugger_custom(self):
"""Specify your own implementation of run_debugger_custom in your own
controller.
"""
pass
def run_debugger(self, debugger):
"""Responsible for correctly launching and tearing down the debugger."""
self.debugger = debugger
# Fetch command line options, if any.
the_cmdline = []
commands = self.step_collection.commands
if "DexCommandLine" in commands:
cmd_line_objs = commands["DexCommandLine"]
assert len(cmd_line_objs) == 1
cmd_line_obj = cmd_line_objs[0]
the_cmdline = cmd_line_obj.the_cmdline
with self.debugger:
if not self.debugger.loading_error:
self._run_debugger_custom(the_cmdline)
# We may need to pickle this debugger controller after running the
# debugger. Debuggers are not picklable objects, so set to None.
self.debugger = None