solenv/inc/lldb4aoo.py | 78 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+)
New commits: commit 76d674c4aea0a40a3c46453e653055859a6a7ba9 Author: Herbert Dürr <h...@apache.org> Date: Wed Feb 20 15:35:52 2013 +0000 lldb4aoo: consolidate AOO string data/object/nullptr handling diff --git a/solenv/inc/lldb4aoo.py b/solenv/inc/lldb4aoo.py index 2319c16..6172207 100644 --- a/solenv/inc/lldb4aoo.py +++ b/solenv/inc/lldb4aoo.py @@ -1,5 +1,5 @@ -# to activate run the command below when inside lldb -# command script import /tools/lldb4aoo.py +# to activate LLDB helper script run the command below when inside LLDB +# command script import /tools/lldb4aoo.py # or add the line to ~/.lldbinit to always activate it def __lldb_init_module( dbg, dict): @@ -26,60 +26,53 @@ def __lldb_init_module( dbg, dict): # definitions for individual LLDB type summary helpers -def ret_strinfo( refs, length, ary0): - a = ary0.AddressOf().GetPointeeData( 0, length) - if ary0.GetByteSize() == 1: - s = ''.join([chr(x) for x in a.uint8s]) +def ret_strdata_info( v, refvar, lenvar, aryvar): + while v.TypeIsPointerType(): + if v.GetValueAsUnsigned() == 0: + return 'NULL-Pointer!' + v = v.Dereference() + r = v.GetChildMemberWithName( refvar).GetValueAsSigned() + l = v.GetChildMemberWithName( lenvar).GetValueAsSigned() + c = v.GetChildMemberWithName( aryvar) + d = c.AddressOf().GetPointeeData( 0, l) + if c.GetByteSize() == 1: # assume UTF-8 + s = ''.join([chr(x) for x in d.uint8s]) else: # assume UTF-16 - s = (u''.join([unichr(x) for x in a.uint16s])).encode('utf-8') - return ('{refs=%d, len=%d, str="%s"}' % (refs, length, s.encode('string_escape'))) + s = (u''.join([unichr(x) for x in d.uint16s])).encode('utf-8') + info = ('{refs=%d, len=%d, str="%s"}' % (r, l, s.encode('string_escape'))) + return info + +def ret_strobject_info( v, ptrvar): + while v.TypeIsPointerType(): + if v.GetValueAsUnsigned() == 0: + return 'NULL-Pointer!' + v = v.Dereference() + p = v.GetChildMemberWithName( ptrvar) + return p.Dereference() + def getinfo_for_rtl_String( valobj, dict): - while valobj.TypeIsPointerType(): - valobj = valobj.Dereference() - r = valobj.GetChildMemberWithName('refCount').GetValueAsSigned() - l = valobj.GetChildMemberWithName('length').GetValueAsSigned() - a = valobj.GetChildMemberWithName('buffer') - return ret_strinfo(r,l,a) + return ret_strdata_info( valobj, 'refCount', 'length', 'buffer') def getinfo_for_rtl_uString( valobj, dict): - while valobj.TypeIsPointerType(): - valobj = valobj.Dereference() - r = valobj.GetChildMemberWithName('refCount').GetValueAsSigned() - l = valobj.GetChildMemberWithName('length').GetValueAsSigned() - a = valobj.GetChildMemberWithName('buffer') - return ret_strinfo(r,l,a) + return ret_strdata_info( valobj, 'refCount', 'length', 'buffer') def getinfo_for__ByteStringData( valobj, dict): - while valobj.TypeIsPointerType(): - valobj = valobj.Dereference() - r = valobj.GetChildMemberWithName('mnRefCount').GetValueAsSigned() - l = valobj.GetChildMemberWithName('mnLen').GetValueAsSigned() - a = valobj.GetChildMemberWithName('maStr') - return ret_strinfo(r,l,a) + return ret_strdata_info( valobj, 'mnRefCount', 'mnLen', 'maStr') def getinfo_for__UniStringData( valobj, dict): - while valobj.TypeIsPointerType(): - valobj = valobj.Dereference() - r = valobj.GetChildMemberWithName('mnRefCount').GetValueAsSigned() - l = valobj.GetChildMemberWithName('mnLen').GetValueAsSigned() - a = valobj.GetChildMemberWithName('maStr') - return ret_strinfo(r,l,a) + return ret_strdata_info( valobj, 'mnRefCount', 'mnLen', 'maStr') def getinfo_for_rtl_OString( valobj, dict): - d = valobj.GetChildMemberWithName('pData') - return d.Dereference() + return ret_strobject_info( valobj, 'pData') def getinfo_for_rtl_OUString( valobj, dict): - d = valobj.GetChildMemberWithName('pData') - return d.Dereference() + return ret_strobject_jinfo( valobj, 'pData') def getinfo_for_ByteString( valobj, dict): - d = valobj.GetChildMemberWithName('mpData') - return d.Dereference() + return ret_strobject_jinfo( valobj, 'mpData') def getinfo_for_UniString( valobj, dict): - d = valobj.GetChildMemberWithName('mpData') - return d.Dereference() + return ret_strobject_info( valobj, 'mpData') commit 7af1212f664f46af44e97316d549641de9a31522 Author: Herbert Dürr <h...@apache.org> Date: Wed Feb 20 14:53:37 2013 +0000 consolidate presentation of AOO-strings in LLDB diff --git a/solenv/inc/lldb4aoo.py b/solenv/inc/lldb4aoo.py index b37d99a..2319c16 100644 --- a/solenv/inc/lldb4aoo.py +++ b/solenv/inc/lldb4aoo.py @@ -26,42 +26,45 @@ def __lldb_init_module( dbg, dict): # definitions for individual LLDB type summary helpers +def ret_strinfo( refs, length, ary0): + a = ary0.AddressOf().GetPointeeData( 0, length) + if ary0.GetByteSize() == 1: + s = ''.join([chr(x) for x in a.uint8s]) + else: # assume UTF-16 + s = (u''.join([unichr(x) for x in a.uint16s])).encode('utf-8') + return ('{refs=%d, len=%d, str="%s"}' % (refs, length, s.encode('string_escape'))) + def getinfo_for_rtl_String( valobj, dict): while valobj.TypeIsPointerType(): valobj = valobj.Dereference() r = valobj.GetChildMemberWithName('refCount').GetValueAsSigned() l = valobj.GetChildMemberWithName('length').GetValueAsSigned() - a = valobj.GetChildMemberWithName('buffer').AddressOf().GetPointeeData(0,l) - s = ''.join([chr(x) for x in a.uint8s]) - return '{refs=%d, len=%d, str="%s"}'%(r,l,s) - return info + a = valobj.GetChildMemberWithName('buffer') + return ret_strinfo(r,l,a) def getinfo_for_rtl_uString( valobj, dict): while valobj.TypeIsPointerType(): valobj = valobj.Dereference() r = valobj.GetChildMemberWithName('refCount').GetValueAsSigned() l = valobj.GetChildMemberWithName('length').GetValueAsSigned() - a = valobj.GetChildMemberWithName('buffer').AddressOf().GetPointeeData(0,l) - s = (u''.join([unichr(x) for x in a.uint16s])).encode('utf-8') - return '{refs=%d, len=%d, str="%s"}'%(r,l,s) + a = valobj.GetChildMemberWithName('buffer') + return ret_strinfo(r,l,a) def getinfo_for__ByteStringData( valobj, dict): while valobj.TypeIsPointerType(): valobj = valobj.Dereference() r = valobj.GetChildMemberWithName('mnRefCount').GetValueAsSigned() l = valobj.GetChildMemberWithName('mnLen').GetValueAsSigned() - a = valobj.GetChildMemberWithName('maStr').AddressOf().GetPointeeData(0,l) - s = ''.join([chr(x) for x in a.uint8s]) - return '{refs=%d, len=%d, str="%s"}'%(r,l,s) + a = valobj.GetChildMemberWithName('maStr') + return ret_strinfo(r,l,a) def getinfo_for__UniStringData( valobj, dict): while valobj.TypeIsPointerType(): valobj = valobj.Dereference() r = valobj.GetChildMemberWithName('mnRefCount').GetValueAsSigned() l = valobj.GetChildMemberWithName('mnLen').GetValueAsSigned() - a = valobj.GetChildMemberWithName('maStr').AddressOf().GetPointeeData(0,l) - s = (u''.join([unichr(x) for x in a.uint16s])).encode('utf-8') - return '{refs=%d, len=%d, str="%s"}'%(r,l,s) + a = valobj.GetChildMemberWithName('maStr') + return ret_strinfo(r,l,a) def getinfo_for_rtl_OString( valobj, dict): commit a5592360de789371d9a1d8e2e2ecb32ceb9f67ee Author: Herbert Dürr <h...@apache.org> Date: Wed Feb 20 14:31:34 2013 +0000 fix revised function names in lldb4aoo.py diff --git a/solenv/inc/lldb4aoo.py b/solenv/inc/lldb4aoo.py index 4a36726..b37d99a 100644 --- a/solenv/inc/lldb4aoo.py +++ b/solenv/inc/lldb4aoo.py @@ -45,7 +45,7 @@ def getinfo_for_rtl_uString( valobj, dict): s = (u''.join([unichr(x) for x in a.uint16s])).encode('utf-8') return '{refs=%d, len=%d, str="%s"}'%(r,l,s) -def getinfo_for_rtl__ByteStringData( valobj, dict): +def getinfo_for__ByteStringData( valobj, dict): while valobj.TypeIsPointerType(): valobj = valobj.Dereference() r = valobj.GetChildMemberWithName('mnRefCount').GetValueAsSigned() @@ -54,7 +54,7 @@ def getinfo_for_rtl__ByteStringData( valobj, dict): s = ''.join([chr(x) for x in a.uint8s]) return '{refs=%d, len=%d, str="%s"}'%(r,l,s) -def getinfo_for_rtl__UniStringData( valobj, dict): +def getinfo_for__UniStringData( valobj, dict): while valobj.TypeIsPointerType(): valobj = valobj.Dereference() r = valobj.GetChildMemberWithName('mnRefCount').GetValueAsSigned() @@ -72,11 +72,11 @@ def getinfo_for_rtl_OUString( valobj, dict): d = valobj.GetChildMemberWithName('pData') return d.Dereference() -def getinfo_for_rtl_ByteString( valobj, dict): +def getinfo_for_ByteString( valobj, dict): d = valobj.GetChildMemberWithName('mpData') return d.Dereference() -def getinfo_for_rtl_UniString( valobj, dict): +def getinfo_for_UniString( valobj, dict): d = valobj.GetChildMemberWithName('mpData') return d.Dereference() commit 0baa51eb9889b6ebeb025063461a3d70a9826663 Author: Herbert Dürr <h...@apache.org> Date: Wed Feb 20 13:36:06 2013 +0000 add LLDB helper script to allow more enjoyable AOO debugging sessions diff --git a/solenv/inc/lldb4aoo.py b/solenv/inc/lldb4aoo.py new file mode 100644 index 0000000..4a36726 --- /dev/null +++ b/solenv/inc/lldb4aoo.py @@ -0,0 +1,82 @@ +# to activate run the command below when inside lldb +# command script import /tools/lldb4aoo.py +# or add the line to ~/.lldbinit to always activate it + +def __lldb_init_module( dbg, dict): + # the list of AOO specific types + aoo_types = ['rtl_String', 'rtl::OString', 'rtl_uString', 'rtl::OUString', + '_ByteStringData', '_UniStringData', 'ByteString', 'UniString'] + # register a helper function for each type + for t in aoo_types: + f = 'getinfo_for_' + t.replace( '::', '_') + if f in globals(): + dbg.HandleCommand( 'type summary add %s -F %s.%s' % (t,__name__,f)) + else: + print( 'AOO-LLDB helper function "%s" is not yet defined: "%s" types cannot be displayed properly!' % (f,t)) + + # perform some goodies if the process is ready to run or already running + if dbg.GetNumTargets() > 0: + # the list of interesting function breakpoints + aoo_breakfn = ['main', '__cxa_call_unexpected', 'objc_exception_throw'] + aoo_breakfn += ['__cxa_throw'] + # register the function breakpoints + for t in aoo_breakfn: + dbg.HandleCommand( 'breakpoint set -n ' + t) + + +# definitions for individual LLDB type summary helpers + +def getinfo_for_rtl_String( valobj, dict): + while valobj.TypeIsPointerType(): + valobj = valobj.Dereference() + r = valobj.GetChildMemberWithName('refCount').GetValueAsSigned() + l = valobj.GetChildMemberWithName('length').GetValueAsSigned() + a = valobj.GetChildMemberWithName('buffer').AddressOf().GetPointeeData(0,l) + s = ''.join([chr(x) for x in a.uint8s]) + return '{refs=%d, len=%d, str="%s"}'%(r,l,s) + return info + +def getinfo_for_rtl_uString( valobj, dict): + while valobj.TypeIsPointerType(): + valobj = valobj.Dereference() + r = valobj.GetChildMemberWithName('refCount').GetValueAsSigned() + l = valobj.GetChildMemberWithName('length').GetValueAsSigned() + a = valobj.GetChildMemberWithName('buffer').AddressOf().GetPointeeData(0,l) + s = (u''.join([unichr(x) for x in a.uint16s])).encode('utf-8') + return '{refs=%d, len=%d, str="%s"}'%(r,l,s) + +def getinfo_for_rtl__ByteStringData( valobj, dict): + while valobj.TypeIsPointerType(): + valobj = valobj.Dereference() + r = valobj.GetChildMemberWithName('mnRefCount').GetValueAsSigned() + l = valobj.GetChildMemberWithName('mnLen').GetValueAsSigned() + a = valobj.GetChildMemberWithName('maStr').AddressOf().GetPointeeData(0,l) + s = ''.join([chr(x) for x in a.uint8s]) + return '{refs=%d, len=%d, str="%s"}'%(r,l,s) + +def getinfo_for_rtl__UniStringData( valobj, dict): + while valobj.TypeIsPointerType(): + valobj = valobj.Dereference() + r = valobj.GetChildMemberWithName('mnRefCount').GetValueAsSigned() + l = valobj.GetChildMemberWithName('mnLen').GetValueAsSigned() + a = valobj.GetChildMemberWithName('maStr').AddressOf().GetPointeeData(0,l) + s = (u''.join([unichr(x) for x in a.uint16s])).encode('utf-8') + return '{refs=%d, len=%d, str="%s"}'%(r,l,s) + + +def getinfo_for_rtl_OString( valobj, dict): + d = valobj.GetChildMemberWithName('pData') + return d.Dereference() + +def getinfo_for_rtl_OUString( valobj, dict): + d = valobj.GetChildMemberWithName('pData') + return d.Dereference() + +def getinfo_for_rtl_ByteString( valobj, dict): + d = valobj.GetChildMemberWithName('mpData') + return d.Dereference() + +def getinfo_for_rtl_UniString( valobj, dict): + d = valobj.GetChildMemberWithName('mpData') + return d.Dereference() +
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits