我习惯在Xcode的obj-c代码中设置断点,然后进入/退出我的方法,但我不完全理解当我发现自己单步执行Apple框架代码时会发生什么。
当然,我们没有源代码,所以你只能看到反汇编代码(我不太了解汇编程序)
如果我(为了它的地狱)只是继续踩到程序集,然后最终我从调试器步进启动,在堆栈框架窗格中,我只是我的应用程序列为正在运行,模拟器中的应用程序是现在正在运行,不再停顿。
我知道这是一个理论问题,但为什么我不能无休止地继续执行汇编代码?我的应用程序毕竟还在运行。
答案 0 :(得分:3)
您遇到的是运行循环。运行循环负责查找应用程序处理的事件并将它们发送到正确的处理程序。它通过调用操作系统来请求下一个事件来完成此操作。如果系统没有该应用程序的任何待处理事件,它将使应用程序进入休眠状态,直到它获得一个。然后它将返回新事件,运行循环将处理它。
但是,由于应用程序将控制权传递给操作系统以获取事件,因此在控制权返回应用程序之前,调试器不允许查看发生的情况。由于它正在逐步执行它看到的唯一指令,因此调试器将应用程序视为正在运行。 Xcode会向您报告并激活模拟器,以便您可以在运行时查看它正在执行的操作。
一旦在模拟器中执行事件,操作系统就会发现应用程序有一个待处理的事件并将其唤醒,将控制权返回给运行循环。调试器将此视为完成最后一条指令的步骤,并允许您继续正常步进。从这一点开始,您可以逐步执行应用程序使用的所有事件处理代码,如果您进入调用,甚至可能返回到代码中,然后再返回到运行循环以再次等待下一个事件。