This is the mail archive of the
gdb@sources.redhat.com
mailing list for the GDB project.
Problems in the edge of functions
- From: a2782 at dis dot ulpgc dot es
- To: gdb at sources dot redhat dot com, a2782 at dis dot ulpgc dot es
- Date: Thu, 13 Feb 2003 17:57:37 GMT
- Subject: Problems in the edge of functions
- Reply-to: a2782 at dis dot ulpgc dot es
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!