> 
> Hi Enrico,
> 
> thank you for your help.
> 

You're welcome :)

>> Since you're only really producing one child value, it looks like you may 
>> want to provide a summary for the wstring instead of synthetic children.
> Cool, thats exactly what I'm searching for, but I found only the synthetic 
> children examples in the docu.
>> 

I think summaries are described here: http://lldb.llvm.org/varformats.html 
(there is an example about computing the area of a rectangle via Python and use 
that as a summary)

>> You are trying to bind a synthetic children provider to *every* 
>> std::basic_string<T>? Why?
> I am dealing with utf-8 utf-16 and utf-32 strings in my application and it 
> would be great to be able to view all strings. Currently only the int version 
> is implemented :-(

Are you going to have a way to distinguish the several encodings once you bind 
every std::basic_string<T> to your summary function? If so, great :)
A nice thing to be told about regexp, is that an exact match always wins over 
them, so you can make this binding and still get std::string (which is 
std::basic_string<char>) for free with the default summary provider

>> Again, I think a summary for std::wstring (and std::basic_string<wchar_t>) 
>> would be enough for the purpose.
> Yes
>> 
>> What version of LLDB are you using? (LLDB has a "version" command you can 
>> use) This looks like an issue with the built-in synthetic children provider 
>> for class std::vector.
> LLDB-112

You may want to try on TOT

>> In order to test *your* wstring provider, you should have a single variable 
>> of type std::wstring and try to "frame variable" that one variable. Here, 
>> your entry point is the synthetic children provider for std::vector.
> Thats what I've allready done with:
> 
> (lldb) type synthetic add "std::wstring" --python-class 
> wstring.StdWStringSynthProvider
> (lldb) frame variable aWideString
> (std::wstring) aWideString = {
>  HELLO WORLD!!! = 0x0000004500000048
> }
> 
> But when I have a vector of std::wstring the type of each element is 
> std::basic_string<int, ...> and the synth. children provider gets not invoked 
> (thats why I tried to use  "^(std::)?basic_string<.+>", without success)
> 
> (lldb) frame variable aWideStringVector
> (vector<std::basic_string<wchar_t>, std::allocator<std::basic_string<wchar_t> 
> > >) aWideStringVector = {
>  [0] = {
>    _M_dataplus = {
>      _M_p = 0x0000000107300aa8
>    }
>  }
>  [1] = {
>    _M_dataplus = {
>      _M_p = 0x0000000107300bc8
>    }
>  }

This is promising, it looks like LLDB is displaying your vector items

>> again, what you're doing here is asking the std::vector synthetic children 
>> provider (built into LLDB) to provide you with child at index 0 - your 
>> wstring provider is not being invoked at this moment.
> The std::vector synthetic children provider returns the child at index 0. 
> When lldb prints this child, the summary provider for wstring gets invoked, 
> right?

Yes, right
>> 1) Probably not - if you're using a recent version of LLDB then this issue 
>> might need further testing. Otherwise, it seems a good idea to retry this 
>> with TOT
>> 2) Again, I would just use a summary string provider. On LLDB TOT, the 
>> attached Python file (which is a very slightly modified version of what you 
>> sent) works well in providing a summary for std::wstring
> Okay, the summary solution is obviously the better one. What is TOT? The 
> latest lldb trunk version?

Yes, TOT is the latest trunk of LLDB that you download from svn and build 
yourself

>> (lldb) command script import wstring.py
>> (lldb) type summary add --python-function wstring.wstring_summary 
>> std::wstring
>> (lldb) frame variable
>> (std::wstring) foo = hello world
> Unfortunately, this does not work for me. LLDB seems not to invoke the 
> summary provider:
> 
> (lldb) command script import /Users/nino.kettlitz/wstring.py
> (lldb) type summary clear
> (lldb) type summary add --python-function wstring.wstring_summary 
> "std::wstring"
> (lldb) frame variable aWideString
> (std::wstring) aWideString = {
>  _M_dataplus = {
>    _M_p = 0x0000000107300b68
>  }
> }
> 
> 

Weird. But again, please use TOT before we explore other potential issues.

_______________________________________________
lldb-dev mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

Reply via email to