xref: /trunk/main/solenv/inc/lldb4aoo.py (revision f174ccd1a39c6e14b2c9c6f81e1834da5a242b2d)
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