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

msk*_*skw 14 objective-c ios

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

谢谢

小智 48

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

NSLog(@"%@", [NSThread callStackSymbols]);
Run Code Online (Sandbox Code Playgroud)

(文件.)

如果你不能使用它:

#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);
Run Code Online (Sandbox Code Playgroud)

(文件.)


rma*_*ddy 5

NSThread callStackSymbols.