Files
libucore/src/backtrace.c
T
2013-07-02 21:22:03 +02:00

54 lines
1.0 KiB
C

#include <execinfo.h>
#include <stdio.h>
#include <stdlib.h>
#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);
if (lines != NULL) {
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);
}