[lldb-dev] Selectively disabling value formatter

Enrico Granata via lldb-dev lldb-dev at lists.llvm.org
Mon Jan 25 15:31:02 PST 2016


> On Jan 25, 2016, at 3:20 PM, Vadim Chugunov <vadimcn at gmail.com> wrote:
> 
> On Mon, Jan 25, 2016 at 11:04 AM, Enrico Granata <egranata at apple.com <mailto:egranata at apple.com>> wrote:
> 
>> On Jan 25, 2016, at 12:23 AM, Vadim Chugunov via lldb-dev <lldb-dev at lists.llvm.org <mailto:lldb-dev at lists.llvm.org>> wrote:
>> 
>> Hi,
>> If I have an SBValue for an object whose type has a formatter enabled for it, is there a way to detect this via the Python API, and if so, request an "unmodified" view of the object?
> 
> There definitely is a way for synthetic children, as you discovered below
> For type formats, you can simply set the format on the SBValue on an individual basis (SBValue::SetFormat)
> As for summaries, no, there is no way, as that would be nonsensical (don’t like the summary? just don’t ask for it - but there’s no meaning to getting the summary of a value once you disabled its summary)
> 
> Yes, this is about synthetic children.  Summaries are not a problem.
>  
> 
>> I've experimented with value.IsSynthetic() and value.GetNonSyntheticValue(), but the former seems to always return false, and the latter gives me the same list of children as the original value.
> 
> Do you have a reproduction case I can look at?
> 
> My setup is kinda complicated, I want to make sure I am using the API correctly before attempting to create a self-contained repro case.
>  

That’s fair. Can you at least try to describe what you’re trying to do and the data types involved in this?

> GetNonSyntheticValue() returning self is correct behavior if IsSynthetic() == False; but if there really is a synthetic provider attached to the object, IsSynthetic() should definitely return True
> 
> 
> Whose IsSynthetic() is supposed to return True,- the parent's or the child's?  

What do you mean with this?
The model is that you have an SBValue, and that SBValue could be backed by a synthetic value. If you want, you can LLDB not to prefer synthetic values - which changes the way the current SBValue works - or for the same backing variable, give you a non-synthetic SBValue, which is what GetNonSyntheticValue() does

Parent/child should have nothing to do with this, unless I am misunderstanding you

> And on which object should I be calling GetNonSyntheticValue()?  (I assume on the parent?)
> 
> Vadim


Thanks,
- Enrico
📩 egranata@.com ☎️ 27683

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


More information about the lldb-dev mailing list