#include #include #include #include "ucore/backtrace.h" #define MAX_BACKTRACE_SYMBOLS 96 void uc_backtrace_fd(int fd) { void *buffer[MAX_BACKTRACE_SYMBOLS]; void **syms; int ptrs; ptrs = backtrace(buffer, MAX_BACKTRACE_SYMBOLS); if (ptrs > 0) { //dont print out this function ptrs--; syms = &buffer[1]; } else { syms = &buffer[0]; } backtrace_symbols_fd(syms, ptrs, fd); } void uc_backtrace_buf(char *buf, size_t len) { void *buffer[MAX_BACKTRACE_SYMBOLS]; int ptrs; char **lines; size_t remaining = len; int i; ptrs = backtrace(buffer, MAX_BACKTRACE_SYMBOLS); buf[0] = 0; lines = backtrace_symbols(buffer, ptrs); for (i = 1; i < ptrs; i++) { int rc = snprintf(buf, remaining, "%s\n", lines[i]); if (rc <= 0 || (size_t)rc >= remaining) { break; } remaining -= rc; buf += rc; } free(lines); }