43 lines
1.5 KiB
Python
43 lines
1.5 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
|
|
"""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
|