how to use gdb to explore the stack/heap?
Solution 1
My first approach to using GDB for debugging is to setup breakpoints. This is done like so:
prompt> gdb ./x_bstree.c
(gdb) #prompt
(gdb) b 123 #break at line 123
(gdb) r #start program
Now your program halts at line 123 of your program. Now you can examine variables in stack or heap using print
. For stack variables just use print <varname>
. For heap variables (pointers) use print <*varname>
. Not sure there is anything special to do for examining stack/heap variables?
Of course to debug multi-threaded applications you would need to make it run in single-threaded mode & then dubug Otherwise it becomes difficult to predict what's happening.
For anything else there is extensive documentation of gdb & many sites also provide gdb cheat sheets.
Solution 2
you can dump raw memory with the 'x' command
so if you want to look at bits of the stack or heap try things like
x/10b &stackvar
x/200b &heapvar-20
The last one will show you 200 bytes starting from 20 bytes before heapvar. So if you just malloced that you can see the heap header too
Solution 3
View stack:
gdb> backtrace
View current stack frame:
gdb> info frame
View arguments of current stack frame:
gdb> info args
View local variable of current stack frame:
gdb> info locals
Navigate to parent stack frame:
gdb> frame 1
Solution 4
Try using ddd
. ddd manual
Ok. Maybe I elaborate a little. I use it like this.
compile my program with debug symbols:
gcc -g program.c -o program
run ddd
:
ddd program
In gui you can do all sorts of things, view machine code, view memory, etc. . Look around.
In manual there is also a section of examining stack. ddd
provides good interface for you
to examine C program.
Dervin Thunk
Updated on July 09, 2022Comments
-
Dervin Thunk almost 2 years
Could anyone please give me a quick overview/point me to documentation of a way to inspect the stack (and heap?) of a C program? I thought this should be done with GDB, but if there are other more straighforward alternatives, then that should be fine as well.
Thanks.
-
Dervin Thunk over 13 yearsi thought ddd was just a front end for gdb, no?
-
Casual Coder over 13 yearsI've found it more convenient than gdb. In gui you can look at several things at once. In gdb I am scrolling back all the time.
-
rc0r over 8 yearsI like your approach! Is there any good gdb plugin that allows to examine the heap showing it's chunk data, headers, in-use bits and the like? I just found gdb-heap. Unfortunately it seems pretty outdated and unmaintained.
-
starturtle over 7 yearsIt IS just a front end for gdb, see updated manual location. It can, however, be a lot more straightforward for certain types of workflow than a console-only tool.
-
Max Power almost 2 yearsNone of that displays raw memory content.