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