Why is GDB “jumping back” when debugging with c so

2019-02-18 00:26发布

I'm debugging the goldfish android kernel (version 3.4), with kernel sources.

Now I found that gdb sometimes jump back and forth between lines, e.g consider c source code like the following:

char *XXX;
int a;
...

if (...)
{

}

When I reached the if clause, I type in n and it will jump back to the int a part. Why is that?

If I execute that command again, it would enter the brackets in the if.

If possible, I want to avoid that part, and enter the if directly (of course, if condition matches)

1条回答
\"骚年 ilove
2楼-- · 2019-02-18 01:18

When I reached the if clause, I type in n and it will jump back to the int a part. Why is that?

Because your code is compiled with optimization on, and the compiler can (and often does) re-arrange instructions of your program in such a way that instructions "belonging" to different source lines are interleaved (code motion optimizations attempt (among other things) to move load instructions to long before their results are needed; this helps to hide memory latency).

If you are using gcc-4.8 or later, build your sources with -Og. Else, see this answer.

查看更多
登录 后发表回答