11364750dSJames Henderson# DExTer : Debugging Experience Tester 21364750dSJames Henderson# ~~~~~~ ~ ~~ ~ ~~ 31364750dSJames Henderson# 41364750dSJames Henderson# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 51364750dSJames Henderson# See https://llvm.org/LICENSE.txt for license information. 61364750dSJames Henderson# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 71364750dSJames Henderson"""Abstract Base class for controlling debuggers.""" 81364750dSJames Henderson 91364750dSJames Hendersonimport abc 101364750dSJames Henderson 11*f98ee40fSTobias Hieta 121364750dSJames Hendersonclass DebuggerControllerBase(object, metaclass=abc.ABCMeta): 133a094d8bSJeremy Morse def __init__(self, context, step_collection): 143a094d8bSJeremy Morse self.context = context 153a094d8bSJeremy Morse self.step_collection = step_collection 163a094d8bSJeremy Morse 171364750dSJames Henderson @abc.abstractclassmethod 181364750dSJames Henderson def _run_debugger_custom(self): 191364750dSJames Henderson """Specify your own implementation of run_debugger_custom in your own 201364750dSJames Henderson controller. 211364750dSJames Henderson """ 221364750dSJames Henderson pass 231364750dSJames Henderson 241364750dSJames Henderson def run_debugger(self, debugger): 25*f98ee40fSTobias Hieta """Responsible for correctly launching and tearing down the debugger.""" 261364750dSJames Henderson self.debugger = debugger 273a094d8bSJeremy Morse 283a094d8bSJeremy Morse # Fetch command line options, if any. 293a094d8bSJeremy Morse the_cmdline = [] 303a094d8bSJeremy Morse commands = self.step_collection.commands 31*f98ee40fSTobias Hieta if "DexCommandLine" in commands: 32*f98ee40fSTobias Hieta cmd_line_objs = commands["DexCommandLine"] 333a094d8bSJeremy Morse assert len(cmd_line_objs) == 1 343a094d8bSJeremy Morse cmd_line_obj = cmd_line_objs[0] 353a094d8bSJeremy Morse the_cmdline = cmd_line_obj.the_cmdline 363a094d8bSJeremy Morse 371364750dSJames Henderson with self.debugger: 3875b31692SStephen Tozer if not self.debugger.loading_error: 393a094d8bSJeremy Morse self._run_debugger_custom(the_cmdline) 4075b31692SStephen Tozer 411364750dSJames Henderson # We may need to pickle this debugger controller after running the 421364750dSJames Henderson # debugger. Debuggers are not picklable objects, so set to None. 431364750dSJames Henderson self.debugger = None 44