我正在使用内核源代码调试金鱼安卓内核(版本3.4)。
现在我发现gdb有时会在行之间来回跳转,例如考虑c源代码,如下所示:
char *XXX;
int a;
...
if (...)
{
}
当我到达if
子句时,我输入n
,它将跳回int a
部分。那是为什么?
如果我再次执行该命令,它将输入if
。
如果可能,我想避开那部分,并直接输入if(当然,如果条件匹配)
答案 0 :(得分:7)
当我到达if子句时,我输入n并且它将跳回到int的一部分。那是为什么?
因为您的代码是在优化的基础上编译的,并且编译器可以(并且经常)以这样的方式重新排列程序的指令:“属于”不同源行的指令是交错的(代码运动优化尝试(在其他事情)在需要结果之前很久就将加载指令移动;这有助于隐藏内存延迟。)
如果您使用的是gcc-4.8
或更高版本,请使用-Og
构建您的来源。否则,请参阅this回答。