我正在使用内核源代码调试 goldfish android 内核(版本 3.4)。
现在我发现 gdb 有时会在行之间来回跳转,例如考虑如下所示的 c 源代码:
char *XXX;
int a;
...
if (...)
{
}
当我到达 if
子句时,我输入 n
它将跳回到 int a
部分。这是为什么?
如果我再次执行该命令,它会在 if
中输入括号。
如果可能,我想避开那部分,直接输入if(当然是if条件匹配)
最佳答案
When I reached the if clause, I type in n and it will jump back to the int a part. Why is that?
因为您的代码是在优化的情况下编译的,并且编译器可以(并且经常)以这样一种方式重新安排您程序的指令,即“属于”不同源代码行的指令交错(代码运动优化尝试(在其他事情)将加载指令移动到需要其结果之前很久;这有助于隐藏内存延迟)。
如果您使用的是 gcc-4.8
或更高版本,请使用 -Og
构建您的源代码。否则,请参阅 this回答。
关于android - 为什么用c源代码调试时GDB是 "jumping back",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24388942/