私は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"]によって返された反復子からの最初の結果で を返し、次に次の結果のために を返すことによって行われました。DataBlockPrinterchildren()db["hb"]["data"]size
に別のプリンターを使用しようとしましたHeapBlocksが、問題は、HeapBlockそれがどれくらい大きいかがわからないことです。それは親(DataBlock)に格納されているため、HeapBlockプリンターは反復を停止するタイミングも知りません。
ここの一部として印刷されている場合、sizeフィールドをきれいなプリンターに渡すことは可能ですか?HeapBlockDataBlock