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