14

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

谢谢

4

2 回答 2

50

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

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

文档。

如果你不能使用它:

#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);

文档。

于 2012-11-10T05:32:57.367 回答
4

NSThread callStackSymbols

于 2012-11-10T05:30:52.460 回答