This shows how to list all currently visible variables (once) based on Tom's suggestions.
, , , , , .
, , .
, info locals . , set.
main.py
gdb.execute('file a.out', to_string=True)
gdb.execute('break 10', to_string=True)
gdb.execute('run', to_string=True)
frame = gdb.selected_frame()
block = frame.block()
names = set()
while block:
if(block.is_global):
print()
print('global vars')
for symbol in block:
if (symbol.is_argument or symbol.is_variable):
name = symbol.name
if not name in names:
print('{} = {}'.format(name, symbol.value(frame)))
names.add(name)
block = block.superblock
main.c
int i = 0;
int j = 0;
int k = 0;
int main(int argc, char **argv) {
int i = 1;
int j = 1;
{
int i = 2;
i = 2;
}
return 0;
}
gcc -ggdb3 -O0 -std=c99 main.c
gdb --batch -q -x main.py
:
i = 2
argc = 1
argv = 0x7fffffffd718
j = 1
global vars
k = 0
, enum, symbol.is_constant.
Ubuntu 14.04, GDB 7.7.1, GCC 4.8.4.