Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c Xcode调试器-为什么你只能一步一步进入苹果框架代码?_Objective C_Xcode_Debugging - Fatal编程技术网

Objective c Xcode调试器-为什么你只能一步一步进入苹果框架代码?

Objective c Xcode调试器-为什么你只能一步一步进入苹果框架代码?,objective-c,xcode,debugging,Objective C,Xcode,Debugging,我习惯于在Xcode中的obj-c代码中设置断点,然后进入/退出我的方法,但我不完全理解当我在苹果框架代码中单步执行时会发生什么 当然,我们没有源代码,所以您只能看到反汇编程序代码(顺便说一句,我对汇编程序了解不多) 如果我(见鬼)一直单步执行程序集,那么最终我会从调试程序单步启动,在堆栈帧窗格中,我只是将我的应用程序列为正在运行,模拟器中的应用程序现在正在运行,不再暂停 我知道这是一个有点理论性的问题,但为什么我不能无休止地逐步完成汇编代码呢?毕竟,我的应用程序仍在运行。您正在体验的是运行循环

我习惯于在Xcode中的obj-c代码中设置断点,然后进入/退出我的方法,但我不完全理解当我在苹果框架代码中单步执行时会发生什么

当然,我们没有源代码,所以您只能看到反汇编程序代码(顺便说一句,我对汇编程序了解不多)

如果我(见鬼)一直单步执行程序集,那么最终我会从调试程序单步启动,在堆栈帧窗格中,我只是将我的应用程序列为正在运行,模拟器中的应用程序现在正在运行,不再暂停


我知道这是一个有点理论性的问题,但为什么我不能无休止地逐步完成汇编代码呢?毕竟,我的应用程序仍在运行。

您正在体验的是运行循环。运行循环负责查找应用程序要处理的事件,并将它们发送到适当的处理程序。它通过调用操作系统请求下一个事件来实现这一点。如果系统没有该应用程序的任何挂起事件,它将使该应用程序进入睡眠状态,直到它得到一个。然后它将返回新事件,运行循环将对其进行处理

但是,由于应用程序将控件传递给操作系统以获取事件,因此在控件返回到应用程序之前,不允许调试器查看正在发生的事情。由于调试器正在单步执行它看到的唯一指令,因此它会将应用程序视为正在运行。Xcode会向您报告这一点,并激活模拟器,以便您可以看到它在运行时正在做什么


一旦在模拟器中执行事件,操作系统就会发现应用程序有一个挂起的事件,并将其唤醒,从而将控制权返回到运行循环。调试器将此视为完成上一条指令上的步骤,并允许您继续正常执行步骤。从这一点上,您可以逐步完成应用程序使用的所有事件处理代码,如果您进入调用,甚至可能回到代码中,然后再返回运行循环等待下一个事件。

您遇到了某种特权代码,调试器无法设置断点的位置。听起来您可能遇到了运行循环,这意味着调试器仍在单步执行。尝试在模拟器中执行一个事件,看看它是否返回到调试器。@ughoavgfhw是的,正如您所建议的,如果我执行另一个操作,我会返回调试器。你对这里发生的事情有更多的了解吗?(顺便说一句,我认为我不太明白runloop在做什么;我怀疑这可能就是问题所在)