如何在程序运行时NSLog一个调用堆栈?

时间:2012-11-10 05:28:06

标签: objective-c ios

有没有办法获得调用堆栈?假设我有一个被许多其他函数调用的函数,但我需要知道是谁调用它。

由于

2 个答案:

答案 0 :(得分:48)

当然有。如果你可以使用Cocoa框架:

NSLog(@"%@", [NSThread callStackSymbols]);

Documentation.

如果你不能使用它:

#include <execinfo.h>

int size = 256;
void *stack[size];
size = backtrace(stack, size);

char **syms = backtrace_symbols(stack, size);
for (int i = 0; i < size; i++) {
    printf("Frame #%d: %s\n", i, syms[i]);
}
free(syms);

Documentation.

答案 1 :(得分:5)

请参阅NSThread callStackSymbols