16#include "omDerivedConfig.h"
22#define MAXPATHLEN 1024
30#ifndef OM_MAX_BACKTRACE_DEPTH
31#define OM_MAX_BACKTRACE_DEPTH 16
48 int i=0,
j=0, filled = 0;
51 memset(
info, 0,
max*
sizeof(omRetInfo_t));
63#if defined(HAVE_POPEN) && defined(OM_PROG_ADDR2LINE)
69 l = sprintf(
command,
"%s -s -C -f -e %s",
85 while ((filled <
j) &&
86 (fscanf(pipe,
"%200[^\n]\n%200[^:]:%d\n",
info[filled].func,
info[filled].file, &(
info[filled].line)) == 3))
88 if (*
info[filled].func !=
'?' && *
info[filled].file !=
'?' &&
info[filled].line > 0)
111 if (fmt[
l] ==
'p') fprintf(
fd,
"%p",
info[
i].addr);
112 else if (fmt[
l] ==
'f') fprintf(
fd,
"%-20s", (*
info[
i].file !=
'\0' ?
info[
i].file :
"??"));
113 else if (fmt[
l] ==
'F') fprintf(
fd,
"%-20s", (*
info[
i].func !=
'\0' ?
info[
i].func :
"??"));
114 else if (fmt[
l] ==
'l') fprintf(
fd,
"%d",
info[
i].line);
115 else if (fmt[
l] ==
'N')
117 if (*
info[
i].func !=
'\0')
119 char*
found = (
char*) strchr(
info[
i].func,
'(');
121 fprintf(
fd,
"%-20s",
info[
i].func);
125 fprintf(
fd,
"%-20s",
"??");
127 else if (fmt[
l] ==
'L')
129 int n = fprintf(
fd,
"%s:%d", (*
info[
i].func !=
'\0' ?
info[
i].file :
"??"),
info[
i].line);
130 if (n < 20) fprintf(
fd,
"%*s", 20-n,
" ");
132 else if (fmt[
l] ==
'i') fprintf(
fd,
"%d",
i);
158#ifdef OM_PRINT_RETURN_ADDRESS
171 if (
max <= 0)
return 0;
219#ifdef OM_TRACK_RETURN
223#ifndef OM_INTERNAL_DEBUG
226#ifdef OM_TRACK_RETURN
230#ifdef OM_TRACK_FILE_LINE
236#if defined(OM_TRACK_RETURN) && defined(OM_TRACK_FILE_LINE)
237 if (r !=
NULL &&
info[0].addr == r &&
l > 0 &&
f != 0)
239 strcpy(
info[0].file,
f);
248#ifdef OM_TRACK_FILE_LINE
249 fprintf(
fd,
" %s:%d",
f,
l);
251#ifdef OM_TRACK_RETURN
252 fprintf(
fd,
" ra=%p", r);
255#ifndef OM_INTERNAL_DEBUG
260#ifdef OM_PRINT_RETURN_ADDRESS
static int max(int a, int b)
#define omGetBackTrace(bt, s, max)
int omPrintRetInfo(omRetInfo info, int max, FILE *fd, const char *fmt)
int omBackTrace_2_RetInfo(void **bt, omRetInfo info, int max)
int _omPrintBackTrace(void **bt, int max, FILE *fd, OM_FLR_DECL)
int _omPrintCurrentBackTrace(FILE *fd, OM_FLR_DECL)
static char om_this_prog[MAXPATHLEN]
int omFilterRetInfo_i(omRetInfo info, int max, int i)
int omPrintBackTrace(void **bt, int max, FILE *fd)
#define OM_MAX_BACKTRACE_DEPTH
#define omFilterRetInfo(info, max, cond)
#define omPrintCurrentBackTraceMax(A, B)
#define omInitRet_2_Info(argv0)