我有一个方法会在意外的时间在我的iPhone应用程序中调用,而我无法弄清楚调用它的代码。有没有办法从Objective C方法或Xcode功能中找到它?基本上...
- (void)myMethod {
NSLog(@"who just called me?");
}
这个方法是从我的代码中的很多地方调用的,所以只搜索方法名称不会缩小范围。我可以暂时向方法添加一个参数,然后编辑对该方法的每次调用,以添加一个唯一的标识符作为参数,但这需要大量的编辑,然后在我完成时撤消所有的编辑。
理想情况下,我会找到调用此方法的代码的类和行号。我不需要在方法中使用此信息,我只需要它进行调试。
答案 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
以获得回溯。从那里我可以看到在此之前调用的最后几个方法。这很难看,但它确实有效。还有更好的方法吗?