Problems in the edge of functions
a2782@dis.ulpgc.es
a2782@dis.ulpgc.es
Thu Feb 13 17:02:00 GMT 2003
Hi to all!
I\'m using GDB to design a didactic graphic environment over it (as
DDD). But I have found that, when I put a breakpoint in the first
machine instruction of a function (push %ebp) and I ask the debugger
for the information of the frames, GDB \"lies\". An example:
void foo() <-- breakpoint
{
int b = 2;
}
int main()
{
int a = 10;
foo();
}
(in i386 code:
.globl foo
foo:
pushl %ebp <-- breakpoint
movl %esp, %ebp
subl $8, %esp
movl $2, -4(%ebp)
leave
ret
.globl main
main:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
movl $10, -4(%ebp)
call foo
leave
ret
)
If I type \"info locals\" when the program stops in the breakpoint, GDB
returns: \"b = 10\" (it should return \"b = 14726457264\"). It\'s evident
that GDB is looking in the position where it thinks that \'b\' should be
(but in this position we find \'a\'). The reason why this occurs is that
the stack has not been updated (the stack updates with the
instructions \'mov %esp, %ebp\', and \'subl $8, %esp\', but they haven\'t
been executed). However, if I type \'x /1wx 0x0bfff...\' and \'info
registers\', I\'ll be able to discover the real state of the stack.
There\'s a similar problem with the instruction \'leave\'.
My question is: is this a bug? Or is there a way of solving it?
Thanks in advance!
More information about the Gdb
mailing list