Có cách nào để có được ngăn xếp cuộc gọi không? cho phép nói rằng tôi có một hàm được gọi bởi nhiều hàm khác, nhưng tôi cần phải biết ai đã gọi nó.Làm thế nào để NSLog một cuộc gọi ngăn xếp khi một chương trình đang chạy?
Cảm ơn
Có cách nào để có được ngăn xếp cuộc gọi không? cho phép nói rằng tôi có một hàm được gọi bởi nhiều hàm khác, nhưng tôi cần phải biết ai đã gọi nó.Làm thế nào để NSLog một cuộc gọi ngăn xếp khi một chương trình đang chạy?
Cảm ơn
Tất nhiên là có. Nếu bạn có thể sử dụng khuôn khổ Cocoa:
NSLog(@"%@", [NSThread callStackSymbols]);
Nếu bạn không thể sử dụng nó:
#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);
Điều này rất hữu ích, cảm ơn bạn. – mskw