如何判断调用方法的代码是什么?

时间:2014-06-11 06:31:37

标签: ios objective-c xcode

我有一个方法会在意外的时间在我的iPhone应用程序中调用,而我无法弄清楚调用它的代码。有没有办法从Objective C方法或Xcode功能中找到它?基本上...

- (void)myMethod {
    NSLog(@"who just called me?");
}

这个方法是从我的代码中的很多地方调用的,所以只搜索方法名称不会缩小范围。我可以暂时向方法添加一个参数,然后编辑对该方法的每次调用,以添加一个唯一的标识符作为参数,但这需要大量的编辑,然后在我完成时撤消所有的编辑。

理想情况下,我会找到调用此方法的代码的类和行号。我不需要在方法中使用此信息,我只需要它进行调试。

5 个答案:

答案 0 :(得分:6)

您可以记录调用堆栈以查看调用方法的位置

- (void)myMethod {
    NSLog(@"who just called me? %@", [NSThread callStackSymbols]);
}

答案 1 :(得分:4)

使用NSThread +callStackSymbols - 您可以直接记录它。

答案 2 :(得分:4)

如果您通过Xcode运行应用程序,则只需在myMethod中设置断点并运行该应用程序。当达到断点时,应用程序将暂停,调试器将显示通向方法调用的堆栈跟踪。然后你就可以看到它究竟发生了什么。

无需记录堆栈跟踪。使用调试器实时查看。

答案 3 :(得分:2)

Xcode为我们提供了一个很棒的功能“Break Point”,您只需要在我们的方法中设置断点,就可以看到控件到达的位置。

答案 4 :(得分:0)

这是我提出的最好的。在崩溃应用程序的方法中添加一些代码:

- (void)myMethod {
    NSLog(@"who just called me?");
    [self nonexistentMethod];
}

然后在应用程序崩溃后,在Xcode控制台中输入bt以获得回溯。从那里我可以看到在此之前调用的最后几个方法。这很难看,但它确实有效。还有更好的方法吗?