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