LINUX.ORG.RU

История изменений

Исправление xaizek, (текущая версия) :

info gdb говорит:

   You can save a value in a convenience variable with an assignment
expression, just as you would set a variable in your program.  For
example:

     set $foo = *object_ptr

would save in '$foo' the value contained in the object pointed to by
'object_ptr'.

А для вызова метода ему, видимо, нужно сделать this для объекта, который не является частью образа программы.

# по значению
(gdb) set $v = args
(gdb) p $v
$2 = std::vector of length 0, capacity 0
(gdb) p $v.size()
Attempt to take address of value not located in memory.

# по адресу
(gdb) set $v = &args
(gdb) p *$v
$3 = std::vector of length 0, capacity 0
(gdb) p $v->size()
$4 = 0

Команда может выглядеть как-то так:

define pfoo
    set $v = &$arg0
    set $i = 0
    while ($i < $v->size())
        print (*$v)[$i++]->b
    end
end

Исходная версия xaizek, :

info gdb говорит:

   You can save a value in a convenience variable with an assignment
expression, just as you would set a variable in your program.  For
example:

     set $foo = *object_ptr

would save in '$foo' the value contained in the object pointed to by
'object_ptr'.

А для вызова метода ему, видимо, нужно сделать this для объекта, который не является частью образа программы.

# по значению
(gdb) set $v = args
(gdb) p $v
$2 = std::vector of length 0, capacity 0
(gdb) p $v.size()
Attempt to take address of value not located in memory.

# по адресу
(gdb) set $v = &args
(gdb) p *$v
$3 = std::vector of length 0, capacity 0
(gdb) p $v->size()
$4 = 0

Команда может выглядеть как-то так:

define pfoo
    set $v = &$arg0
    set $i = 0
    while ($i < $v->size())
        print (*$v)[$i++]->b
    end
end