私はC++で次のような構造体を持っています:
struct HeapBlock {
char* data;
}
struct DataBlock {
int size;
HeapBlock hb;
}
これらはフレームワークの一部であり、他にもいくつかのメンバー、ヘルパーなどがありますが、これらは重要な部分です。これを Python GDB pretty-printer で次のように表示したいと思います。
NAME TYPE VALUE
DataBlock: DataBlock "Size 2000 @ 0x445343"
|--->size int 2000
|--->data HeapBlock {...}
|--->[0] char 0x34
|--->[1] char 0x45
....
<more values>
これまでのところ、HeapBlock を別の子として表示することに失敗しました。イテレータを悪用して生成することに成功しました:
NAME TYPE VALUE
DataBlock: DataBlock
|--->size int 2000
|--->[0] char 0x34
|--->[1] char 0x45
....
<more values>
これは、のメソッドdb["size"]
によって返された反復子からの最初の結果で を返し、次に次の結果のために を返すことによって行われました。DataBlockPrinter
children()
db["hb"]["data"]
size
に別のプリンターを使用しようとしましたHeapBlocks
が、問題は、HeapBlock
それがどれくらい大きいかがわからないことです。それは親(DataBlock
)に格納されているため、HeapBlock
プリンターは反復を停止するタイミングも知りません。
ここの一部として印刷されている場合、size
フィールドをきれいなプリンターに渡すことは可能ですか?HeapBlock
DataBlock