首页 > 解决方案 > Xcode 调试 - 你如何知道下一个方法调用是什么?

问题描述

如果我在特定的代码行设置了断点,我试图弄清楚如何确定 Xcode 中的下一个方法调用是什么。有没有办法告诉你接下来执行什么方法?使用“Step Over”的问题在于,有时它会切换到显示十六进制值的屏幕(我不知道它叫什么)。我猜这是某种显示字节码的屏幕?我不确定如何解决这个问题并转到链中的下一个方法。

标签: xcode

解决方案


只需查看屏幕左侧的堆栈跟踪。最上面的行(第 0 行)是您当前所在的函数。下一行(第 1 行)是调用当前函数的函数,它是当前函数完成后您将返回的函数。

看看那个堆栈跟踪。注意有些行是粗体的,有些不是。粗体线是您拥有源代码的函数。您编写的代码或您正在使用的任何 3rd 方库中的代码。

如果您正在单步执行一些自己的代码并到达函数的最后一行,请查看堆栈跟踪。看第一行。是粗体还是粗体?如果没有,那么就没有源代码,如果您输入该函数,您将看到汇编代码(所有那些十六进制的东西)。

假设第 0 行(您当前的函数)是您自己的代码。然后您会看到第 1 行和第 2 行不是粗体,但第 3 行是粗体,并且您想在第 3 行中找到您的代码。单击“step out”向上箭头 (↥) 以完成当前功能。这将带你到第 1 行(现在它变成第 0 行)。现在你在汇编代码中。只需再次点击“退出”按钮。再次点击它,直到您再次返回自己的代码。

只需查看堆栈跟踪,即可了解每次单击“step out”后会将您带到何处。

下图是一个例子。查看堆栈跟踪。第 0 行是我当前所在的函数。它effective在我的ViewController班级中命名。请注意,它是粗体。第 1 行是调用第 0 行的函数。第 1 行是我的cellForRowAt方法。它也是粗体的。调试器当前位于effective方法的最后一行。如果此时我“跳过”或“退出”,我将离开该effective方法并返回到调用它的位置。第 1 行显示了它的位置。由于第 1 行是粗体,我知道我有它的代码。

一旦您离开当前函数并返回到前一个函数,调试器中的所有行都会向上移动。第 1 行变为第 0 行。现在我知道,当我离开我的cellForRowAt方法时,我会被带入我没有代码的代码中(因为堆栈跟踪中的那一行不是粗体)。事实上,正如您在堆栈跟踪中可以看到的那样,在堆栈跟踪一直返回到main. 所以除非你想看大量的汇编代码,一旦你在 中完成调试cellForRowAt,你不妨点击“继续执行程序”按钮。

在此处输入图像描述


推荐阅读