| #import <Foundation/Foundation.h> |
| #include <pthread.h> |
| |
| /** Max number of frames in the stack trace buffer */ |
| #define kLPThreadStackTraceMaxFramesCount 128 |
| |
| typedef struct LPThreadStackTrace { |
| /** The thread that the stacktrace belongs to. */ |
| pthread_t thread; |
| /** Array of addresses in the thread stack. */ |
| void *stacktrace[kLPThreadStackTraceMaxFramesCount]; |
| /** Number of valid frames in stacktrace array. */ |
| int frames; |
| } LPThreadStackTrace; |
| |
| /** |
| * Generate the stacktrace of all threads in the current process. |
| * |
| * @param buffer Output. Array of stacktraces. |
| * @param size Size of buffer. |
| * @return The count of actual threads in the buffer. If the count of threads is more than the size |
| * of buffer, it returns the size of buffer and cut off rest of threads. |
| */ |
| int LPSnapshotAllThreadsStackTrace(LPThreadStackTrace *buffer, int size); |
| |
| /** |
| * Generate the stacktrace of the thread. |
| * |
| * @param buffer Output. Array of addresses in the stacktrace. |
| * @param size Size of buffer. |
| * @param thread The target thread to be snapshotted. |
| * @return The count of actual stack frames in the buffer. If the count of stack frames is more than |
| * the size of buffer, it returns the size of buffer and cut off rest of frames. |
| * |
| */ |
| int LPSnapshotThreadStackTrace(void **buffer, int size, pthread_t thread); |
| |
| /** |
| * Symbolicates addresses in a stack trace. |
| * Not guaranteed in release mode. |
| * |
| * @param buffer Array of addresses in the stacktrace. |
| * @param size Size of buffer array. |
| * @return Array of symbolicated address. |
| */ |
| NSArray<NSString *> *LPStackTraceString(void **buffer, int size); |
| |
| /** |
| * Symbolicates a list of stack traces. |
| * The parameters should be the output of LPSnapshotAllThreadsStackTrace(). |
| * Not guaranteed in release mode. |
| * |
| * @param buffer Array of LPThreadStackTrace. |
| * @param size Size of buffer array. |
| * @return Array of symbolicated address. |
| */ |
| NSArray<NSArray<NSString *> *> *LPStackTracesString(LPThreadStackTrace *buffer, int size); |