1*f174ccd1SHerbert Dürr# to activate run the command below when inside lldb 2*f174ccd1SHerbert Dürr# command script import /tools/lldb4aoo.py 3*f174ccd1SHerbert Dürr# or add the line to ~/.lldbinit to always activate it 4*f174ccd1SHerbert Dürr 5*f174ccd1SHerbert Dürrdef __lldb_init_module( dbg, dict): 6*f174ccd1SHerbert Dürr # the list of AOO specific types 7*f174ccd1SHerbert Dürr aoo_types = ['rtl_String', 'rtl::OString', 'rtl_uString', 'rtl::OUString', 8*f174ccd1SHerbert Dürr '_ByteStringData', '_UniStringData', 'ByteString', 'UniString'] 9*f174ccd1SHerbert Dürr # register a helper function for each type 10*f174ccd1SHerbert Dürr for t in aoo_types: 11*f174ccd1SHerbert Dürr f = 'getinfo_for_' + t.replace( '::', '_') 12*f174ccd1SHerbert Dürr if f in globals(): 13*f174ccd1SHerbert Dürr dbg.HandleCommand( 'type summary add %s -F %s.%s' % (t,__name__,f)) 14*f174ccd1SHerbert Dürr else: 15*f174ccd1SHerbert Dürr print( 'AOO-LLDB helper function "%s" is not yet defined: "%s" types cannot be displayed properly!' % (f,t)) 16*f174ccd1SHerbert Dürr 17*f174ccd1SHerbert Dürr # perform some goodies if the process is ready to run or already running 18*f174ccd1SHerbert Dürr if dbg.GetNumTargets() > 0: 19*f174ccd1SHerbert Dürr # the list of interesting function breakpoints 20*f174ccd1SHerbert Dürr aoo_breakfn = ['main', '__cxa_call_unexpected', 'objc_exception_throw'] 21*f174ccd1SHerbert Dürr aoo_breakfn += ['__cxa_throw'] 22*f174ccd1SHerbert Dürr # register the function breakpoints 23*f174ccd1SHerbert Dürr for t in aoo_breakfn: 24*f174ccd1SHerbert Dürr dbg.HandleCommand( 'breakpoint set -n ' + t) 25*f174ccd1SHerbert Dürr 26*f174ccd1SHerbert Dürr 27*f174ccd1SHerbert Dürr# definitions for individual LLDB type summary helpers 28*f174ccd1SHerbert Dürr 29*f174ccd1SHerbert Dürrdef getinfo_for_rtl_String( valobj, dict): 30*f174ccd1SHerbert Dürr while valobj.TypeIsPointerType(): 31*f174ccd1SHerbert Dürr valobj = valobj.Dereference() 32*f174ccd1SHerbert Dürr r = valobj.GetChildMemberWithName('refCount').GetValueAsSigned() 33*f174ccd1SHerbert Dürr l = valobj.GetChildMemberWithName('length').GetValueAsSigned() 34*f174ccd1SHerbert Dürr a = valobj.GetChildMemberWithName('buffer').AddressOf().GetPointeeData(0,l) 35*f174ccd1SHerbert Dürr s = ''.join([chr(x) for x in a.uint8s]) 36*f174ccd1SHerbert Dürr return '{refs=%d, len=%d, str="%s"}'%(r,l,s) 37*f174ccd1SHerbert Dürr return info 38*f174ccd1SHerbert Dürr 39*f174ccd1SHerbert Dürrdef getinfo_for_rtl_uString( valobj, dict): 40*f174ccd1SHerbert Dürr while valobj.TypeIsPointerType(): 41*f174ccd1SHerbert Dürr valobj = valobj.Dereference() 42*f174ccd1SHerbert Dürr r = valobj.GetChildMemberWithName('refCount').GetValueAsSigned() 43*f174ccd1SHerbert Dürr l = valobj.GetChildMemberWithName('length').GetValueAsSigned() 44*f174ccd1SHerbert Dürr a = valobj.GetChildMemberWithName('buffer').AddressOf().GetPointeeData(0,l) 45*f174ccd1SHerbert Dürr s = (u''.join([unichr(x) for x in a.uint16s])).encode('utf-8') 46*f174ccd1SHerbert Dürr return '{refs=%d, len=%d, str="%s"}'%(r,l,s) 47*f174ccd1SHerbert Dürr 48*f174ccd1SHerbert Dürrdef getinfo_for_rtl__ByteStringData( valobj, dict): 49*f174ccd1SHerbert Dürr while valobj.TypeIsPointerType(): 50*f174ccd1SHerbert Dürr valobj = valobj.Dereference() 51*f174ccd1SHerbert Dürr r = valobj.GetChildMemberWithName('mnRefCount').GetValueAsSigned() 52*f174ccd1SHerbert Dürr l = valobj.GetChildMemberWithName('mnLen').GetValueAsSigned() 53*f174ccd1SHerbert Dürr a = valobj.GetChildMemberWithName('maStr').AddressOf().GetPointeeData(0,l) 54*f174ccd1SHerbert Dürr s = ''.join([chr(x) for x in a.uint8s]) 55*f174ccd1SHerbert Dürr return '{refs=%d, len=%d, str="%s"}'%(r,l,s) 56*f174ccd1SHerbert Dürr 57*f174ccd1SHerbert Dürrdef getinfo_for_rtl__UniStringData( valobj, dict): 58*f174ccd1SHerbert Dürr while valobj.TypeIsPointerType(): 59*f174ccd1SHerbert Dürr valobj = valobj.Dereference() 60*f174ccd1SHerbert Dürr r = valobj.GetChildMemberWithName('mnRefCount').GetValueAsSigned() 61*f174ccd1SHerbert Dürr l = valobj.GetChildMemberWithName('mnLen').GetValueAsSigned() 62*f174ccd1SHerbert Dürr a = valobj.GetChildMemberWithName('maStr').AddressOf().GetPointeeData(0,l) 63*f174ccd1SHerbert Dürr s = (u''.join([unichr(x) for x in a.uint16s])).encode('utf-8') 64*f174ccd1SHerbert Dürr return '{refs=%d, len=%d, str="%s"}'%(r,l,s) 65*f174ccd1SHerbert Dürr 66*f174ccd1SHerbert Dürr 67*f174ccd1SHerbert Dürrdef getinfo_for_rtl_OString( valobj, dict): 68*f174ccd1SHerbert Dürr d = valobj.GetChildMemberWithName('pData') 69*f174ccd1SHerbert Dürr return d.Dereference() 70*f174ccd1SHerbert Dürr 71*f174ccd1SHerbert Dürrdef getinfo_for_rtl_OUString( valobj, dict): 72*f174ccd1SHerbert Dürr d = valobj.GetChildMemberWithName('pData') 73*f174ccd1SHerbert Dürr return d.Dereference() 74*f174ccd1SHerbert Dürr 75*f174ccd1SHerbert Dürrdef getinfo_for_rtl_ByteString( valobj, dict): 76*f174ccd1SHerbert Dürr d = valobj.GetChildMemberWithName('mpData') 77*f174ccd1SHerbert Dürr return d.Dereference() 78*f174ccd1SHerbert Dürr 79*f174ccd1SHerbert Dürrdef getinfo_for_rtl_UniString( valobj, dict): 80*f174ccd1SHerbert Dürr d = valobj.GetChildMemberWithName('mpData') 81*f174ccd1SHerbert Dürr return d.Dereference() 82*f174ccd1SHerbert Dürr 83