This is the mail archive of the 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;

(in i386 code:
.globl foo
   pushl %ebp <-- breakpoint
   movl %esp, %ebp
   subl $8, %esp
   movl $2, -4(%ebp)

.globl main
   pushl %ebp
   movl %esp, %ebp
   subl $24, %esp
   movl $10, -4(%ebp)
   call foo

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]