[lldb-dev] Formatter for std::shared_ptr<std::wstring>

Enrico Granata egranata at apple.com
Wed Aug 8 14:30:37 PDT 2012


If you are using GetPointeeData() it is a known bug in LLDB, which was resolved in r 161384

If that does not fix the issue, please do let us know with a reproduction case :-)

Enrico Granata
✉ egranata@.com
✆ (408) 972-7683

On Aug 8, 2012, at 2:27 PM, Alexander Angriawan <angriawan at hotmail.com> wrote:

> Attached. 
> But this doesn't work with global variables and I haven't had chance to look at it.
> 
> 
> Subject: Re: [lldb-dev] Formatter for std::shared_ptr<std::wstring>
> From: egranata at apple.com
> Date: Wed, 8 Aug 2012 09:48:34 -0700
> CC: nino.kettlitz at googlemail.com; lldb-dev at cs.uiuc.edu
> To: angriawan at hotmail.com
> 
> Alexander,
> feel free to share your script if you desire.
> I can work on integrating it into mainline LLDB.
> 
> Thanks!
> 
> Enrico Granata
>  egranata@.com
> ✆ (408) 972-7683
> 
> On Aug 7, 2012, at 8:41 PM, Alexander Angriawan <angriawan at hotmail.com> wrote:
> 
> Hi,
>  
> I got it working.  
> I follow example from the following to navigate and Nino's script to read the char.
> http://llvm.org/svn/llvm-project/lldb/trunk/examples/synthetic/libcxx.py
> 
> I can post the script if needed.
> 
> thanks,
> PA
> 
>  
> Subject: Re: [lldb-dev] Formatter for std::shared_ptr<std::wstring>
> From: egranata at apple.com
> Date: Mon, 6 Aug 2012 11:54:51 -0700
> CC: angriawan at hotmail.com; lldb-dev at cs.uiuc.edu
> To: nino.kettlitz at googlemail.com
> 
> Alexander is using libcpp, part of the LLVM project, whereas you are using libstdcpp (a GNU project).
> They both implement the C++ Standard Library but with different internals!
> Luckily they are easy to differentiate because libcpp classes lived in a std::__1 namespace
> 
> Enrico Granata
>  egranata@.com✆ (408) 972-7683
> 
> On Aug 6, 2012, at 11:52 AM, Nino Kettlitz <nino.kettlitz at googlemail.com> wrote:
> 
> Hi Alexander,
> 
> your string implementation looks very complicated.
> 
> Also the type of the string looks strange. I would expect that "std::wstring" is a typedef
> for "std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>"
> 
> You are using "std::__1::wstring" and the real type also contains this "__1" stuff
> "std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t>>"
> and it is additionally wrapped by a std::pair or sth similar. 
> 
> I've never seen this before. Maybe somebody else in the mailing list did?!
> 
> So the wstring.py data formater works only for std::wstring with a "_M_dataplus" and a "_M_p" member
> 
> Cheers,
> Nino
> 
> 
> 
> 
> Am 06.08.2012 19:47, schrieb Alexander Angriawan:
> I am using Mac OS X Version 10.7.4
> The following is the lldb output:
> (lldb) frame variable x
> (std::__1::wstring) x = {
>   __r_ = {
>     std::__1::__libcpp_compressed_pair_imp<std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >::__rep, std::__1::allocator<wchar_t> > = {
>       __first_ = {
>          = {
>           __l = {
>             __cap_ = 17
>             __size_ = 12
>             __data_ = 0x00000001001009c0
>           }
>           __s = {
>              = {
>               __size_ = '\x11'
>               _ = \x11\0\0\0
>             }
>             __data_ = {
>               [0] = \0\0\0\0
>               [1] = \f\0\0\0
>               [2] = \0\0\0\0
>               [3] = \xc0\t\x10\0
>               [4] = \x01\0\0\0
>             }
>           }
>           __r = {
>             __words = {
>               [0] = 17
>               [1] = 12
>               [2] = 4296018368
>             }
>           }
>         }
>       }
>     }
>   }
> }
> (lldb) 
> 
> Thanks,
> PA
> 
> Date: Mon, 6 Aug 2012 11:24:48 +0200
> From: nino.kettlitz at googlemail.com
> To: angriawan at hotmail.com
> Subject: Re: [lldb-dev] Formatter for std::shared_ptr<std::wstring>
> 
> Hmm, thats strange.
> 
> I'm currently using not the latest lldb, so maybe something changed.
> 
> What platform are you developing on? The script is written for osx.
> 
> Maybe you can just send me the output of "frame variable x" without having the script installed. Maybe the structure of your strings differ.
> 
> 
> N. 
> 
> Am 06.08.12 10:54, schrieb Alexander Angriawan:
> Thank you Nino.
> 
> Unfortunately the script doesn't work in my environment.
> GetByteSize() always return 0 in my case.
> 
> ....
>             if _M_p_data.GetByteSize() == 1:
>                 _M_p_deref = _M_p_data.GetUnsignedInt8(e, 0)    # utf-8
>             elif _M_p_data.GetByteSize() == 2:
>                 _M_p_deref = _M_p_data.GetUnsignedInt16(e, 0)   # utf-16
>             elif _M_p_data.GetByteSize() == 4:
>                 _M_p_deref = _M_p_data.GetSignedInt32(e, 0)     # utf-32
>             else:
>                 _M_p_deref = -1
>             
>             if _M_p_deref <= 0:
>              break
> ----
> 
> My simple test code:
> 
> int main(int argc, const char * argv[])
> {
>     std::wstring x = L"fooo";
>     return 0;
> }
> 
> ---
> JA
> 
> 
> 
> 
> 
> Date: Mon, 6 Aug 2012 09:54:09 +0200
> From: nino.kettlitz at googlemail.com
> To: angriawan at hotmail.com
> CC: lldb-dev at cs.uiuc.edu
> Subject: Re: [lldb-dev] Formatter for std::shared_ptr<std::wstring>
> 
> Oh,
> 
> I've seen, that the script attached to the mail is not on the server, so I attached it again, although it would be better to have it in the lldb svn.
> 
> Yust copy the script to your hom directory and ad the folowing line to your .lldbinit
> 
> script sys.path[:0] = [os.path.expanduser('~')]
> command alias pwd script print os.getcwd()
> script import wstring
> type summary add --python-function wstring.wstring_summary "std::wstring"
> type summary add --python-function wstring.wstring_summary "std::basic_string<int, class std::char_traits<int>, class std::allocator<int> >"
> type summary add --python-function wstring.wstring_summary "std::basic_string<unsigned short, class std::char_traits<unsigned short>, class std::allocator<unsigned short> >"
> type summary add --python-function wstring.wstring_summary "std::basic_string<wchar_t, class std::char_traits<wchar_t>, class std::allocator<wchar_t> >"
> 
> 
> Cheers, Nino
> 
> Am 06.08.12 09:19, schrieb Alexander Angriawan:
> Hello,
> 
> I am looking to write data formatter for std::shared_ptr<std::wstring>.
> 
> I found the following old article but this doesn't seem to work.
> I have ver 159 installed.
> http://lists.cs.uiuc.edu/pipermail/lldb-dev/2012-February/000825.html
> 
> Any idea?
> 
> Thank you much,
> PA
> 
> 
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
> 
> 
> 
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
> 
> 
> <formatter.bin>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20120808/b9c46fc4/attachment.html>


More information about the lldb-dev mailing list