gdb.parse_and_eval should un-lazy its results. Otherwise the following can happen. Try 1: (gdb) py foo = gdb.parse_and_eval ("*(char*) $sp") (gdb) x/b $sp 0x7fffffffe1c0: 0 (gdb) py print foo 0 '\000' (gdb) set *(char*) $sp = 42 (gdb) x/b $sp 0x7fffffffe1c0: 42 (gdb) py print foo 0 '\000' <<<<< expected result Try 2: (gdb) py foo = gdb.parse_and_eval ("*(char*) $sp") (gdb) set *(char*) $sp = 43 (gdb) py print foo 43 '+' <<<<< Ugh. (gdb) Note that in the first example, the "py print foo" before modifying memory is sufficient to un-lazy the value. I point this out to show that if we don't make this change then debugging such things can be nasty: a simple "print" can modify program behaviour. Guile's parse-and-eval has the same issue.
This came up in bug #16820, but I'm inclined to disagree. Un-lazying by default means that if parse_and_eval reads a huge array, it will all be copied in. But that neglects the scenario where the code immediately uses the value to fetch just one element -- where remaining lazy would be valuable.