86 lines · python
1import lldb2 3 4class Resolver:5 got_files = 06 func_list = []7 8 def __init__(self, bkpt, extra_args, dict):9 self.bkpt = bkpt10 self.extra_args = extra_args11 12 Resolver.func_list = []13 Resolver.got_files = 014 15 def __callback__(self, sym_ctx):16 print("Resolver callback called")17 sym_name = "not_a_real_function_name"18 sym_item = self.extra_args.GetValueForKey("symbol")19 if sym_item.IsValid():20 sym_name = sym_item.GetStringValue(1000)21 else:22 print("Didn't have a value for key 'symbol'")23 24 if sym_ctx.compile_unit.IsValid():25 Resolver.got_files = 126 else:27 Resolver.got_files = 228 29 if sym_ctx.function.IsValid():30 Resolver.got_files = 331 func_name = sym_ctx.function.GetName()32 Resolver.func_list.append(func_name)33 if sym_name == func_name:34 self.bkpt.AddLocation(sym_ctx.function.GetStartAddress())35 return36 37 if sym_ctx.module.IsValid():38 print(f"Looking for {sym_name}")39 sym = sym_ctx.module.FindSymbol(sym_name, lldb.eSymbolTypeCode)40 if sym.IsValid():41 print(f"Adding location at {sym.GetStartAddress()} to {self.bkpt}")42 self.bkpt.AddLocation(sym.GetStartAddress())43 print(f"After addition: {self.bkpt}")44 else:45 print("Didn't find it, however...")46 47 print(f"GotFiles: {Resolver.got_files}")48 for func in Resolver.func_list:49 print(f"Function: func")50 51 def get_short_help(self):52 return "I am a python breakpoint resolver"53 54class ResolverModuleDepth(Resolver):55 def __get_depth__(self):56 return lldb.eSearchDepthModule57 58 def __callback__(self, sym_ctx):59 print(f"About to call the Resolver callback for {self.bkpt}")60 Resolver.__callback__(self, sym_ctx)61 print("Called the callback for ResolverModuleDepth")62 63 64class ResolverCUDepth(Resolver):65 def __get_depth__(self):66 return lldb.eSearchDepthCompUnit67 68 def __callback__(self, sym_ctx):69 Resolver.__callback__(self, sym_ctx)70 71 72class ResolverFuncDepth(Resolver):73 def __get_depth__(self):74 return lldb.eSearchDepthFunction75 76 def __callback__(self, sym_ctx):77 Resolver.__callback__(self, sym_ctx)78 79 80class ResolverBadDepth(Resolver):81 def __get_depth__(self):82 return lldb.kLastSearchDepthKind + 183 84 def __callback__(self, sym_ctx):85 Resolver.__callback__(self, sym_ctx)86