Files
libucore/src/ucore_backtrace.c
T
2013-03-06 21:58:56 +01:00

52 lines
1008 B
C

#include <execinfo.h>
#include <stdio.h>
#include <stdlib.h>
#include <ucore/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);
}