> On Mar 14, 2018, at 8:22 PM, Florin Trofin via lldb-dev > <lldb-dev@lists.llvm.org> wrote: > > Hi, > > I came across the formatter example in unicode_strings.py where in > utf16_summary() I see this code: > > string_data = value.process.ReadMemory(pointer, length, error) > # utf8 is safe to emit as-is on OSX > return '"%s"' % (string_data.decode('utf-16').encode('utf-8')) > > I am trying to replicate that in my own formatter and I'm having difficulty > converting the pointer to an addr_t which is what ReadMemory wants. In my > case pointer comes from: > > self.rep.GetChildMemberWithName("__l").GetChildMemberWithName("__data_") > > (this is a basic_string which has a union: > struct __rep > { > union { > __long __l; // Used for long strings > __short __s; // Used for short strings - stores in place > __raw __r; // ?? > }; > }; > > and __long is defined as: > > struct __long { > pointer __data_; > size_type __size_; > size_type __cap_; > }; > > So __data_ is a basic_string::pointer (plain C pointer). > > How do I convert this pointer to the addr_t that I need? I believe that the > GetChildMemberWithName returns an SBValue. I tried pointer.GetPointeeData(0, > 1).GetLoadAddress() but I'm not getting the corect results.
__data_ will contain the pointer value. Just do: pointer.GetValueAsUnsigned() > > Thanks! > > Florin > _______________________________________________ > lldb-dev mailing list > lldb-dev@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
_______________________________________________ lldb-dev mailing list lldb-dev@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev