【发布时间】:2011-10-27 08:06:02
【问题描述】:
经常,同一个方法 X 会从不同的其他方法 A、B、C 中调用。是否可以从方法 X 内部获取调用方方法的名称(A、B、C)?最好是 GDB 控制台命令(在调试期间),但带有 NSLog 的东西也足够了。
【问题讨论】:
标签: iphone objective-c gdb call
经常,同一个方法 X 会从不同的其他方法 A、B、C 中调用。是否可以从方法 X 内部获取调用方方法的名称(A、B、C)?最好是 GDB 控制台命令(在调试期间),但带有 NSLog 的东西也足够了。
【问题讨论】:
标签: iphone objective-c gdb call
在被调用函数中输入bt 会有所帮助。这将打印调用函数的回溯;调用层次结构中被调用函数正下方的函数是调用它的函数。
(gdb) bt
#0 factorial (n=10) at recursive.c:13
#1 0x0040135e in main () at recursive.c:9
请注意,main 称为 factorial。
【讨论】:
您可以在gdb中使用命令backtrace查看调用堆栈。
【讨论】:
如果您在方法 X 内的断点处,您可以使用 where 打印堆栈,您将能够看到对 X 的调用源自何处。
【讨论】:
Typedef NSLog 打印函数名并将其添加到方法的开头和结尾:
#define CustomLogEnter(fmt, ...) NSLog((@"Function entered %s " fmt), __PRETTY_FUNCTION__, ##__VA_ARGS__);
由于您想要替代 gdb 并且不使用断点,您可以尝试上述方法,也可以使用 __LINE__ 记录行号。
【讨论】: