brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · a41190b Raw
76 lines · python
1import lldb2 3 4class stop_handler:5    def __init__(self, target, extra_args, dict):6        self.extra_args = extra_args7        self.target = target8        self.counter = 09        ret_val = self.extra_args.GetValueForKey("return_false")10        if ret_val:11            self.ret_val = False12        else:13            self.ret_val = True14 15    def handle_stop(self, exe_ctx, stream):16        self.counter += 117        stream.Print("I have stopped %d times.\n" % (self.counter))18        increment = 119        value = self.extra_args.GetValueForKey("increment")20        if value:21            increment = value.GetUnsignedIntegerValue()22        else:23            stream.Print("Could not find increment in extra_args\n")24        frame = exe_ctx.GetFrame()25        expression = "g_var += %d" % (increment)26        expr_result = frame.EvaluateExpression(expression)27        if not expr_result.GetError().Success():28            stream.Print(29                "Error running expression: %s" % (expr_result.GetError().GetCString())30            )31        value = exe_ctx.target.FindFirstGlobalVariable("g_var")32        if not value.IsValid():33            stream.Print("Didn't get a valid value for g_var.")34        else:35            int_val = value.GetValueAsUnsigned()36        stream.Print("Returning value: %d from handle_stop.\n" % (self.ret_val))37        return self.ret_val38 39 40class bad_handle_stop:41    def __init__(self, target, extra_args, dict):42        print("I am okay")43 44    def handle_stop(self):45        print("I am bad")46 47 48class no_handle_stop:49    def __init__(self, target, extra_args, dict):50        print("I am okay")51 52 53class self_deleting_stop:54    def __init__(self, target, extra_args, dict):55        self.target = target56 57    def handle_stop(self, exe_ctx, stream):58        interp = exe_ctx.target.debugger.GetCommandInterpreter()59        result = lldb.SBCommandReturnObject()60        interp.HandleCommand("handle_id", result)61        id_str = result.GetOutput().rstrip()62 63        command = f"target stop-hook delete {id_str}"64        interp.HandleCommand(command, result)65 66 67stop_hook_id = 068 69 70def handle_stop_hook_id(debugger, command, exe_ctx, result, extra_args):71    global stop_hook_id72    if command == "":73        result.AppendMessage(str(stop_hook_id))74    else:75        stop_hook_id = int(command)76