[lldb-dev] Writing a data formatter for LLDB

Greg Clayton via lldb-dev lldb-dev at lists.llvm.org
Mon Oct 9 08:49:43 PDT 2017


> On Oct 2, 2017, at 9:25 AM, Francois Fayard via lldb-dev <lldb-dev at lists.llvm.org> wrote:
> 
> Hi,
> 
> I would like to write a data formatter for LLDB, for a class which is very close to std::array. Here it is:
> 
> template <typename T, int n>
> class StaticArray {
>  private:
>   T data_[n];
> }
> 
> I wrote the following data formatter adapted from my own “std::vector” data formatter but I still have blanks to fill :
> 
> class StaticArrayProvider:
>     def __init__(self, valobj, internal_dict):
>         self.valobj = valobj
>         self.data = self.valobj.GetChildMemberWithName('data_').GetChildAtIndex(0)

This is wrong, just remove the ".GetChildAtIndex(0)" from the above line otherwise "self.data" has a reference to the first value in the data_ array. 

>         self.data_type = self.data.GetType()
>         self.type_size = self.data_type.GetByteSize()

Don't need the above two lines.

>         self.size = #???

Since "data_" is an array, it can already be displayed as is. With this data formatter you are just trying to avoid showing "data_" as an extra level in the variable, so you can just forward all queries to "self.data".

> 
>     def num_children(self):
>         return self.size

Just forward all queries to 'data_':
    def num_children(self):
        return self.data.GetNumChildren()

> 
>     def get_child_index(self, name):
>         try:
>             return int(name.lstrip('[').rstrip(']'))
>         except:
>             return -1
> 

    def get_child_index(self, name):
        return self.data.etChildMemberWithName(name)

>     def get_child_at_index(self, index):
>         if index < 0:
>             return None
>         if index >= self.num_children():
>             return None
>         try:
>             return #???
>         except:
>             return None
> 
    def get_child_at_index(self, index):
        return self.data.etChildMemberAtIndex(index)

> Could you please give me a hand to fill those blanks?
> 
> François Fayard
> Founder & Consultant - +33 (0)6 01 44 06 93
> Inside Loop - Scaling up Computational Science
> Paris - 38 rue Desbordes-Valmore, 75116 Paris
> Lyon/Grenoble - 34 route de Four, 38090 Vaulx-Milieu
> 
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

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


More information about the lldb-dev mailing list