在gdb中进行漂亮打印时,如何访问数组



我可以使用ptr.deference获得值,但我不知道如何增加指针以获得下一个值。假设我使用的是一个16位有符号数组。如何获取前5个值?

class MyArrayPrinter:
"Print a MyArray"
def __init__ (self, val):
self.val = val
def to_string (self):
return "Array of"
def children(self):
ptr = self.val['array']
#yield ('0', ptr.address[1].dereference())
yield ('5', 47)
def display_hint (self):
return 'array'

对于这个简单的数组类,取自您的另一个问题:

template<class T>
struct MyArray
{
int pos;
T array[10];
MyArray() : pos(0) {}
void push(T val) {
if (pos >= 10)
return;
array[pos++] = val;
}
};

我会实现这样漂亮的打印机:

class MyArrayPrinter:
"Print a MyArray"
class _iterator:
def __init__ (self, start, finish):
self.item = start
self.finish = finish
self.count = 0
def __iter__ (self):
return self
def __next__ (self):
count = self.count
self.count = self.count + 1
if self.item == self.finish:
raise StopIteration
elt = self.item.dereference()
self.item = self.item + 1
return ('[%d]' % count, elt)
def next (self):
return self.__next__()
def __init__ (self, val):
self.val = val
def children (self):
start = self.val['array'][0].address
return self._iterator(start, start + self.val['pos'])
def to_string (self):
len = self.val['pos']
return '%s of length %d' % (self.val.type, len)
def display_hint (self):
return 'array'
pp = gdb.printing.RegexpCollectionPrettyPrinter("mine")
pp.add_printer('MyArray', '^MyArray<.*>$', MyArrayPrinter)
gdb.printing.register_pretty_printer(gdb.current_objfile(), pp)

看起来是这样的:

(gdb) p arr
$1 = MyArray<MyString> of length 2 = {"My test string", "has two"}
(gdb) p arr2
$2 = MyArray<MoreComplex*> of length 1 = {0x22fe00}

最新更新