在objective-c中我可以访问方法中的调用classname / methodname吗?

时间:2011-03-15 01:29:03

标签: iphone objective-c ios nslog

在objective-c中我可以访问方法中的调用classname / methodname吗?

背景:

我目前在我的一些记录方法中添加以下行:

NSLog(@"<%@:%@:%d>", NSStringFromClass([self class]), NSStringFromSelector(_cmd), __LINE__);

最好还包括调用该方法的代码的类名和方法名(位置)。

这可能吗?代码是什么?

感谢

3 个答案:

答案 0 :(得分:3)

没有实际的方法可以做到这一点(因此Cocoa中的所有方法都带有sender个参数)。甚至没有保证 这样的东西 - 它可以从一个普通的,self - 更少的函数调用,或者它可以从一个方法调用内联到它的调用方法,或者我们可以通过跳转到达那一行,或者.......

答案 1 :(得分:1)

如果您只是在调试可执行文件的上下文中执行此操作,请考虑尝试使用GDB Backtrace函数:

http://www.gnu.org/software/libc/manual/html_node/Backtraces.html

不确定最终会看起来像Objective-C,但如果你回到链上足够长的时间,你应该找到一些调用消息的东西......

或尝试阅读本文,看看它是否有帮助:

Why does backtrace not contain Objective-C symbols regardless of -rdynamic?

答案 2 :(得分:1)

http://iphoneincubator.com/blog/debugging/the-evolution-of-a-replacement-for-nslog

很小的谷歌搜索可以走得很远:)

我使用 PRETTY_FUNCTION 和DLog。