为什么GDB在使用c源代码进行调试时会“跳回”

时间:2014-06-24 14:15:16

标签: android debugging gdb kernel

我正在使用内核源代码调试金鱼安卓内核(版本3.4)。

现在我发现gdb有时会在行之间来回跳转,例如考虑c源代码,如下所示:

char *XXX;
int a;
...

if (...)
{

}

当我到达if子句时,我输入n,它将跳回int a部分。那是为什么?

如果我再次执行该命令,它将输入if

中的括号

如果可能,我想避开那部分,并直接输入if(当然,如果条件匹配)

1 个答案:

答案 0 :(得分:7)

  

当我到达if子句时,我输入n并且它将跳回到int的一部分。那是为什么?

因为您的代码是在优化的基础上编译的,并且编译器可以(并且经常)以这样的方式重新排列程序的指令:“属于”不同源行的指令是交错的(代码运动优化尝试(在其他事情)在需要结果之前很久就将加载指令移动;这有助于隐藏内存延迟。)

如果您使用的是gcc-4.8或更高版本,请使用-Og构建您的来源。否则,请参阅this回答。