This is the mail archive of the gdb@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Problems in the edge of functions


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!


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]