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.
My first approach to using GDB for debugging is to setup breakpoints. This is done like so:
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 useprint <varname>
. For heap variables (pointers) useprint <*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.
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
Examining the Stack
Try using
ddd
. ddd manualOk. Maybe I elaborate a little. I use it like this.
compile my program with debug symbols:
run
ddd
: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.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
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