If you don't need to reference the variable in your code but just want to do some ad-hoc investigation, you can use Convenience Variables by using the set
command with a variable name starting with $
:
(gdb) set $foo = method_that_makes_something()
(gdb) set $bar = 15
(gdb) p $bar
$4 = 15
You'll notice when you print things it's prefixed with a numeric variable - you can use these to refer to that value later as well:
(gdb) p $4
$5 = 15
To reiterate: this doesn't actually affect the program's stack, and it can't, as that would break a lot of things. But it's useful if you just need a local playground, some loop variables, etc.
While you can't modify the stack, you can interact with the program's memory space - you can call functions (including malloc
) and construct objects, but these will all live in static memory, not as local variables on the stack.