android - 为什么用c源代码调试时GDB是 "jumping back"

标签 android debugging gdb kernel

我正在使用内核源代码调试 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/

相关文章:

linux - 使用 GDB 调试 netlink 通信

android - 触发显着运动需要多少运动

c++ - 由于无效写入导致的段错误

Node.js 8.9.1 调试不适用于 Netbeans 8.2

gdb - 在GDB中的每一行设置断点

macos - lldb:如何从特定库/框架调用函数

java - 使用 Dijkstra 的多条最短路径

java - 如何将 List<Object> 保存到 SharedPreferences?

android - 做recyclerview adapter单例好不好?

c - 使用gdb调试exe