Как NSLog стека вызовов при запуске программы? - программирование
Подтвердить что ты не робот

Как NSLog стека вызовов при запуске программы?

Есть ли способ получить стек вызовов? скажем, у меня есть функция, вызываемая многими другими функциями, но мне нужно знать, кто ее назвал.

Спасибо

4b9b3361

Ответ 1

Конечно, есть. Если вы можете использовать фреймворк 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);

(Документация.)

Ответ 2

См. NSThread callStackSymbols.