2017-10-02 9 views
0

私は、次のされて、私自身のオブジェクトに対してLLDBデータフォーマッタを書きたいと思います:ここでLLDBデータフォーマッタおよびC配列

template <typename T, int n> 
class StaticArray { 
    T data_[n]; 
} 

は私の合成データフォーマッタは、これまでどのように見えるかです:

class StaticArrayProvider: 
    def __init__(self, valobj, internal_dict): 
     self.valobj = valobj 
     self.data = self.valobj.GetChildMemberWithName('data_').GetChildAtIndex(0) 
     self.data_type = self.data.GetType() 
     self.type_size = self.data_type.GetByteSize() 
     self.size = # ??? 

    def num_children(self): 
     return self.size 

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

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

空白を埋めるために何をすべきか分かりません# ???。何か解決策はありますか?

答えて

1

lldb値システムでは、GetNumChildrenは静的サイズの配列の要素数を返し、GetChildAtIndexはその配列要素を取得します。 data_は静的サイズの配列であるため、データフォーマッタは子供を提供するときにはdata_を転送することができます。私。あなたが行うことができます。その後、

self.data = self.valobj.GetChildMemberWithName('data_') 

num_childrenはちょうどself.data.GetNumChildren()get_child_at_index戻りself.data.GetChildAtIndex()を返します。

lldbがそれを理解できない場合は、オフセットやサイズを計算する必要があります(たとえば、動的サイズの配列や、配列として扱うタイプのポインタがある場合など)。

関連する問題