[lldb-dev] Help with C++ API
Joseph Galbraith
galb at vandyke.com
Thu Aug 29 12:26:08 PDT 2013
On 2013/08/29 12:07, Enrico Granata wrote:
> On Aug 28, 2013, at 7:15 PM, Jakob Leben <jakob.leben at gmail.com
> <mailto:jakob.leben at gmail.com>> wrote:
>
>> On Wed, Aug 28, 2013 at 5:08 PM, <jingham at apple.com
>> <mailto:jingham at apple.com>> wrote:
>>>
>>> So it would be narrowing to view the "synthetic children" as only a
>>> framework for viewing container types.
>>
>> Perhaps what I've missed is that there can be several different
>> synthetic child providers for any parent data type. Even in that case,
>> it seems there is one such provider that's installed on an SBValue
>> provided via C++ API by default. So then my proposal applies to these
>> default providers.
>>
>
> There can only be one synthetic provider per type that is active.
> If you end up installing multiple, through regexp or whatnot, the order
> of categories determines which one wins.
> Technically, a category can only ever contain one provider per type.
> With regular expressions it is fairly easy to violate this requirement.
> What happens then is undefined (i.e. it depends on the order in which
> they were added or in which the iterators we use provide them to us for
> inspection, …) long story short: don’t rely on any such tricks.
>
>> Besides, it's not that SBValue for std::string provides synthetic
>> children in a different way than I would like. The issue is that it
>> doesn't provide synthetic children at all! And so far I simply haven't
>> heard any good reason why it shouldn't by default provide characters
>> as children.
>
> It is a largely uninteresting view for most people. The majority of
> people using LLDB have never expressed the desire to twist their strings
> open and see an array of characters. Actually, there has been an
> opposite drive: even a char[] should be displayed as a string.
> This is really the only reason why that was not implemented.
As a debugger user I definitely want things (even a char[]) displayed as
strings most of the time; however, I do occasionally wish to open the
string up and see the raw characters.
For example, yesterday I was troubleshooting an bug with a spurious
newline character... being able to see the raw character data in an
unambiguous way would have been useful in that case and other cases
involving characters that don't display in an "obvious" way (other
non-printing characters, combining characters, etc.)
On the other hand, if it's going to introduce a 10% performance penalty
in the display as string case, I'll do without.
So while it is rare enough that it hasn't driven me to try and fix it, I
would have occasional use for the feature.
(I did implement a summary provider for std::wstring before lldb
provided one out of the box because that pain was huge for me.)
Thanks,
Joseph
PS. I may not qualify as most people either :-)
More information about the lldb-dev
mailing list